我有两个模型 - 事件和租户。Django错误,同时保存外键 - 不能分配任何,不允许空值
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,值将从保存方法设置并保存。
我在查看文件中出现此错误。
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__'
所以我在这里无法理解 -
1.为什么我必须设置FK为null = True,并且为了工作不created_when。
2.为什么在创建表单时抛出错误,而不是在保存数据时抛出错误。
更新: 任何人downvoting问题 - 请ATLEAST再提一下,为什么你认为这个问题没有以适当的方式询问意见的原因是什么?
感谢您的帮助。我仍然有疑问 - (1)从ModelForm类创建表单对象时发生错误,而不是保存方法。 (2)为什么它在FK上设置null = True时起作用。 – User42
请看看这个 - https://code.djangoproject.com/ticket/18441 – User42
也是这样 - https://code.djangoproject.com/ticket/24787。根据这个,我们无法在模型中的FK上使用null = False和blank = True。 – User42