Сохранение ModelForm, содержащего поле ForeignKey, на которое ссылается другая модель, в таблице базы данных Postgresql
Ниже мои модели
class Seminar(models.Model):
seminarID = models.AutoField(primary_key=True)
presenter_name = models.CharField(max_length=200)
location_name = models.TextField()
seminar_DT = models.DateTimeField(default=datetime.datetime.now)
capacity = models.IntegerField(default=50)
class Registration(models.Model):
registration_ID = models.AutoField(primary_key=True)
seminar=models.ForeignKey(Seminar,to_field='seminarID',on_delete=models.CASCADE)
attendee_name = models.CharField(max_length=200,null=True)
email_address = models.EmailField()
email_sent = models.BooleanField(default=False)
Вот ModelForm, который я создал для Регистрации Модели
class RegistrationForm(forms.ModelForm):
class Meta:
model = Registration
widgets = {
"registration_ID": forms.NumberInput(attrs={'required': "required"}),
"seminar": forms.SelectMultiple(attrs={'required': "required"}),
"attendee_name": forms.TextInput(attrs={'required': "required"}),
"email_address": forms.TextInput(attrs={'required': "required"}),
"email_sent": forms.NullBooleanSelect(attrs={'required': "required"}),
}
fields = ('seminar','attendee_name','email_address','email_sent')
Когда я запускаю вышеупомянутую RegistrationForm на моем шаблоне, я получаю следующее окно
Изображение регистрации ModelForm
поле семинара, которое определяется как ForeignKey в модели регистрации и ссылается на семинара ID в модели семинара. семинар появляется в предварительно заполненной регистрационной форме, что нормально, но он отображается в виде объекта Семинар (2), объекта Семинар (3)... Кроме того, идентификатор семинара в модели семинара - также AutoField и Primarykey.
Когда я сохраняю RegistrationForm, моя база данных postgresql не обновляется с новыми значениями и выбранным объектом семинара (*). пожалуйста, порекомендуйте
В этих ссылках даны как таблицы для семинаров, так и таблицы регистрации: изображение таблицы для семинаров и изображение таблицы для регистрации
1 ответ
Вы должны добавить __str__()
метод (для Django 3.X) в ваш класс регистрации. Если вы используете Django 2.X, добавьте соответствующий метод __unicode__(self)
, Что-то вроде следующего:
def __unicode__(self): return "%s (%s)"%(self.presenter_name, datetime.datetime.strftime(self.seminar_DT, "%Y-%m-%d %H:%M "))
Это говорит Django, который является строковым представлением объекта Registration. Информация необходима для того, чтобы визуализировать представление объекта в виджете. Ознакомьтесь также с документацией по Django.