我有兩個模型 - 事件和租戶。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