繁体   English   中英

将包含引用到另一个模型的ForeignKey字段的ModelForm保存在Postgresql数据库表中

[英]Saving the ModelForm containing ForeignKey field referenced to another Model in Postgresql database table

以下是我的模特

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时,出现以下窗口

注册模型表格的图像

研讨会字段,在注册模型中定义为ForeignKey,在研讨会模型中指的是workshopID。 研讨会出现在预先填写的注册表格中,该表格很好,但显示为研讨会对象(2),研讨会对象(3)...研讨会模型中的workshopID也是AutoField和Primarykey。

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

这些链接中同时提供了研讨会表和注册表快照: 研讨会表的 图像和注册表的图像

您必须在Registration类中添加__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文档

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM