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