python - شهادة - منتديات بايثون




دجانغو العديد لكثير من العلاقة(الفئة) (2)

هدفي هو إضافة فئات إلى نموذج المشاركة. وأود أن تكون قادرة على الاستعلام في وقت لاحق كل وظيفة من قبل فئات مختلفة وأحيانا متعددة.

models.py

class Category(models.Model):
    categories = (
        ('1', 'red'),
        ('2', 'blue'),
        ('3', 'black')
    )
    title = models.CharField(max_length=50, blank=True, choices=categories)

class Post(models.Model):
    text = models.CharField(max_length=500)
    category = models.ManyToManyField(Category)

forms.py

class Post_form(forms.ModelForm):

    categories = (
        ('1', 'red'),
        ('2', 'blue'),
        ('3', 'black')
    )
    category = forms.MultipleChoiceField(required=False, widget=forms.CheckboxSelectMultiple,
    choices=categories)

    class Meta:
        model = Post
        fields = (
            'text',
            'category'
        )

أنا الخلط على منطق إنقاذ واحد أوبج قبل أن تتمكن من حفظ آخر.

views.py

def post(request):
    if request.method == 'POST':
        form = Post_form(request.POST, request.FILES)
        if form.is_valid():
            post = form.save(commit=False)
            post.user = request.user

            p1 = Category(form.cleaned_data['category'])
            post.category.add(p1)

        return redirect('home:home')

    else:
        form = Post_form()
        args = {'form': form }
        return render(request, 'home/new_post.html', args)

خطأ:

"<Post: Post object>" needs to have a value for field "id" before this many-to-many relationship can be used.

تصحيح:

form.cleaned_data ['كاتيغوري'] يعرض قائمة تسبب المشكلة الرئيسية. الآن مشكلتي هي لا يتم حفظ خياري في عنوان فئة الفئة، يتم حفظ رقم التحديد بدلا من ذلك. وهنا ما حصلت عليه.

def post(request):
    if request.method == 'POST':
        form = Post_form(request.POST, request.FILES)
        if form.is_valid():
            post = form.save(commit=False)
            post.user = request.user
            post.save()
            for k in form.cleaned_data['category']:
                p1 = Category(title=k)
                p1.save()
                post.category.add(p1)

تم حلها

views.py

def post(request):
    if request.method == 'POST':
        form = Post_form(request.POST, request.FILES)
        if form.is_valid():
            post = form.save(commit=False)
            post.user = request.user
            post.save()

            for k in form.cleaned_data['category']:
                selection = Category.objects.get(pk=k)
                post.category.add(selection)

            return redirect('home:home')

المشكلة الرئيسية هي أن كنت قد حفظت كائن آخر إلى قاعدة البيانات قبل تعيين الفئة. لذلك تغيير وجهة النظر قليلا لهذا

def post(request):
if request.method == 'POST':
    form = Post_form(request.POST, request.FILES)
    if form.is_valid():
        post = form.save(commit=False)
        post.user = request.user
        post.save()
        for k in form.cleaned_data['category']:
            p1 = Category.objects.create(title=k)
            p1.save()
            post.category.add(p1)

عدل طريقة العرض مثل هذا،

if form.is_valid():
    title = form.cleaned_data['category']
    post = form.save(commit=False)
    post.user = request.user
    post.save()
    category = Category.objects.create(title=title)
    post.category.add(category)
    post.save_m2m()
    return redirect('home:home')




django-views