/ / Django - Create form_valid object.id त्रुटि - django, django-मॉडल, django-forms, django-views, django-class-based-views

Django - Createview form_valid object.id त्रुटि - django, django-models, django-forms, django-views, django-class-based-views

मैं एक ऐसी जगह बनाने की कोशिश कर रहा हूँ जहाँ वस्तुबनाया (एक परियोजना) एक और मॉडल (चैनल) के साथ एक रिश्ता है। समस्या यह है कि मैं "परियोजना के लिए चैनल की प्राथमिक कुंजी" कॉल करने के लिए कैसे वर्कआउट कर सकता हूं।

Models.py:

class Project(models.Model):
channel = models.ForeignKey(
"Channel",
on_delete=models.CASCADE,
)

Views.py:

class ProjectCreate(CreateView):
model = Project
fields = ["name", "description"]

def form_valid(self, form):
Project = form.save(commit=False)
form.instance.channel = Channel.objects.get(id=self.kwargs["channel"])
Project.channel = channel

return super(ProjectCreate, self).form_valid(form)

मुझे लगता है कि कुछ और रूपों के रूप में अच्छी तरह से फ़ाइल में जोड़ा जाना चाहिए:

Forms.py:

class ProjectForm(forms.Form):
name = forms.CharField(max_length=50)
description = forms.CharField(widget=forms.Textarea)

उत्तर:

जवाब के लिए 0 № 1

सबसे पहले, आपको एक का उपयोग करना चाहिए ModelForm ताकि आप इसे उदाहरण बनाने के लिए सहेज सकें। डॉन "टी शामिल हैं channel फ़ील्ड्स में, क्योंकि आप इसे दृश्य में सेट करने जा रहे हैं।

class ProjectForm(forms.ModelForm):
class Meta:
model = Project
fields = ["name", "description"]

फिर, यह मानते हुए कि चैनल को शामिल करने के लिए आपके url पैटर्न को सही ढंग से कॉन्फ़िगर किया गया है, आपको बस इतना करना है channel प्रपत्र उदाहरण पर और मूल वर्ग को कॉल करें " form_valid तरीका।

def form_valid(self, form):
form.instance.channel = Channel.objects.get(id=self.kwargs["channel"])
return super(ProjectCreate, self).form_valid(form)