【问题标题】:Saving the ModelForm containing ForeignKey field referenced to another Model in Postgresql database table保存包含引用到 Postgresql 数据库表中另一个模型的 ForeignKey 字段的 ModelForm
【发布时间】:2018-12-22 09:50:09
【问题描述】:

以下是我的模型

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 时,我会看到以下窗口

Image of the Registration ModelForm

seminar 字段,在注册模型中定义为 ForeignKey,在 Seminar 模型中指的是seminarID。研讨会出现在预先填充的注册表中,这很好,但它显示为研讨会对象 (2)、研讨会对象 (3)... Seminar 模型中的 SeminarID 也是 AutoField 和 Primarykey。

当我保存 RegistrationForm 时,我的 postgresql 数据库不会使用新值和选定的研讨会对象 (*) 进行更新。请指教

研讨会表和注册表快照均在以下链接中提供: image of seminar tableimage of registration table

【问题讨论】:

    标签: django postgresql django-models django-forms django-model-field


    【解决方案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 documentation

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-03
      • 1970-01-01
      • 1970-01-01
      • 2012-07-23
      • 1970-01-01
      相关资源
      最近更新 更多