Сохранение 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.

Другие вопросы по тегам