/ / Django - Помилка Createview form_valid object.id - django, django-models, django-forms, django-views, django-class-views

Django - Createview form_valid object.id error - django, django-models, django-forms, django-views, django-based-views-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 ще щось:

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)