我在創建和保存(插入到數據庫)模型實例時遇到了與Django文檔不一致的非常奇怪的行爲。我已經用盡了可能的原因,並會非常感謝任何建議爲什麼Django無法在這些情況下保存所有字段。創建並保存非空Django模型實例作爲子類實例的一部分
該類我使用:
class Person(models.Model):
user = models.ForeignKey(User)
phone_number = models.CharField(max_length=20, blank=True)
address = models.CharField(max_length=200, blank=True)
及這裏的簡化版,工作,少數情況下的代碼:在任何情況下的Django上official Django docs
# First Case
new_person = Person()
new_person.user = request.user
new_person.phone_number = '111111'
new_person.save(force_insert=True)
# Second One
new_person = Person(user=request.user, phone_number='111111')
new_person.save(force_insert=True)
# Third One
new_person = Person.objects.create(user=request.user, phone_number='111111')
基礎應該創建一個對象,然後將其插入進入DB。
事實上,該對象已成功創建(並設置了所有相關字段),但插入到DB中的行只有id
和user_id
字段填充正確,而phone_number
字段也設置爲空。
但是,訪問和更新現有(保存的早期)對象的所有字段沒有問題。
從Person
中刪除blank=True
類聲明(通過適當的表更改)不會改變任何內容。
編輯: 問題原來是更復雜。完整的描述和解決方案在我自己的答案下面
第三個應該是'Person.objects.create'而不是'Person.objects.Create' - 小寫'c' – karthikr
當您刪除'blank = True'時,它是對數據庫表結構的更改。 Django默認不會識別這個。您必須刪除數據庫並使用syncdb(痛苦的)重新創建,或者運行alter table腳本以不允許空值。 – karthikr
@karthikr#1謝謝你的糾正,但是這只是在這個問題上犯的一點小錯誤。#2我應該提到它,但我也改變了表中的空設置 – glowka