Я намагаюся створити форму, де об'єктстворений (проект) має зв'язок з іншою моделлю (каналом). Проблема полягає в тому, що я не можу "тренуватися, як викликати первинний ключ каналу для відносин проекту".
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 ще щось:
Forms.py:
class ProjectForm(forms.Form):
name = forms.CharField(max_length=50)
description = forms.CharField(widget=forms.Textarea)
Відповіді:
0 для відповіді № 1По-перше, ви повинні використовувати a 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)