Форма Джанго на модели - PullRequest
       3

Форма Джанго на модели

0 голосов
/ 17 февраля 2011

В моем приложении есть модель Guest:

class Guest(models.Model):
event = models.ForeignKey(Event, related_name='guests')
contact = models.ForeignKey(Contact, related_name='guests')
attending_status = models.CharField(max_length=32, choices=ATTENDING_CHOICES, default='no_rsvp')
number_of_guests = models.SmallIntegerField(default=0)
comment = models.CharField(max_length=255, blank=True, default='')
updated = models.DateTimeField(blank=True, null=True)

Событие и контакт Я заполняю себя в Admin при создании гостя. На сайте все, что я хочу, это чтобы гость заполнил форму, где он обновляет свой статус присутствия, указывает количество гостей и оставляет комментарий.

class RSVPForm(forms.Form):
attending = forms.ChoiceField(choices=VISIBLE_ATTENDING_CHOICES, initial='yes', widget=forms.RadioSelect)
number_of_guests = forms.IntegerField(initial=0)
comment = forms.CharField(max_length=255, required=False, widget=forms.Textarea)

Как сохранить изменения в экземпляре модели Guest? Как получить доступ к идентификатору гостя при сохранении изменений в его профиле?

1 Ответ

0 голосов
/ 17 февраля 2011

Вы, наверное, ищете Джанго ModelForm с.Вместо создания подкласса forms.Form в вашем классе RSVPForm, вы должны создать подкласс forms.ModelForm.Затем вы можете использовать функции класса формы модели, чтобы помочь вам достичь того, что вы хотите (скрыть некоторые поля и т. Д.).Ниже приведен пример:

class RSVPForm(forms.ModelForm):
    class Meta:
        model = Guest
        fields = ('attending_status', 'number_of_guests', 'comment')

Это будет делать по существу то, что вы хотите, но вы должны будете не забыть предоставить аргумент ключевого слова instance конструктору формы в вашей функции представления.Этот аргумент является экземпляром модели Guest, которую вы будете обновлять с помощью формы.

form = RSVPForm(instance=guest_object)

Теперь вызовы метода form.save() автоматически сохранят новые данные в этом экземпляре объекта Guest.Вам просто нужно убедиться, что вы всегда передаете аргумент ключевого слова экземпляра, даже когда используете request.POST:

form = RSVPForm(request.POST, instance=guest_object)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...