【发布时间】:2016-09-27 10:34:39
【问题描述】:
我有两个模型 - 事件和租户。
class EventsModel(models.Model):
sys_id = models.AutoField(primary_key=True, null=False, blank=True)
tenant_sys_id = models.ForeignKey('tenant.TenantModel', on_delete = models.CASCADE, null=False, blank=True)
name = models.CharField(max_length=80, null=False, blank=False)
start_date_time = models.DateTimeField(null=False, blank=False)
end_date_time = models.DateTimeField(null=False, blank=False)
created_when = models.DateTimeField(null=False, blank=True)
def save(self, *args, **kwargs):
self.created_when = timezone.now()
self.tenant_sys_id = 1 #for-testing-only. actual current_logged_in_user.tenant_sys_id
return super(EventsModel, self).save(*args, **kwargs)
此模型有一个 FK tenant_sys_id 到租户模型。如果为此我设置 null = False,则会引发以下错误。
ValueError('Cannot assign None: "EventsModel.tenant_sys_id" does not allow null values.',)
我正在从登录的用户详细信息中以覆盖的保存方法设置此字段的值。 设置 null = True 不会引发此错误。
但是,我对 created_when 字段执行相同操作,但未显示此行为。无论 null=True/False,值都是从 save 方法设置并保存。
我在查看文件中收到此错误。
form = EventsForm(request.POST)
print(request.POST) # print
print(form) # do not print. error here <--
if form.is_valid(): # error here if above line is commented.
form.save()
ModelForm类
class EventsForm(ModelForm):
class Meta:
model = EventsModel
fields = '__all__'
所以这里我无法理解-
- 为什么我必须将 FK 设置为 null=True 而不是 created_when 才能工作。
- 为什么它在创建表单时抛出错误,而不是在保存数据时。
【问题讨论】:
标签: python django django-models foreign-keys