Я создаю приложение Poll с этими моделямиДжанго - Сохранение ModelForm с внешним ключом от другой модели
class Poll(BaseModel):
title = models.CharField(max_length=255)
end_date = models.DateField()
class Choice(BaseModel):
poll = models.ForeignKey('Poll')
choice = models.CharField(max_length=255)
index = models.IntegerField()
Опроса может иметь много вариантов - сумма будет варьироваться для каждого опроса. Я изо всех сил пытаюсь понять, как сохранить опрос через модельную форму и в то же время сохранить связанные с ней варианты.
Я знаю, что мне нужно переопределить методы «Сохранить и очистить» в моей программе PollForm, но после этого он становится запутанным. Я знаю, что есть более пифонический/djangoesque способ сделать это. Моя основная путаница - это отношения между выбором и опросом, потому что он определен только в одном направлении.
Кроме того, я не могу понять, как это будет работать при обновлении опроса с помощью набора вариантов, где некоторые существуют, а некоторые - новые. Следующий код не работает, конечно, но это то, как я подхожу к размышлению об этом. Я был бы признателен за толкание в правильном направлении!
class PollForm:
def save(self, choices, commit=True, *args, **kwargs):
poll = super(PollForm, self).save(commit=False, *args, **kwargs)
if commit:
p = poll.save()
for choice in choices:
choice['poll_id'] = p.id
if choice['id']:
c = ChoiceForm(choice, instance=Choice.objects.get(id=choice['id']))
else:
c = ChoiceForm(choice)
if c.is_valid():
c.save()
return poll