2016-11-30 79 views
0

我不知道這是一個錯誤還是Django只允許它發生。我有一個Django模型:使用不存在的字段保存模型實例

class Author(models.Model): 
    name = models.CharField(max_length=128) 

我創建它的一個實例,並賦值給一個不存在的領域address

author = Author() 
author.name = 'abce' 
author.address = 'defg' 
author.save() 

實例保存成功並沒有錯誤消息。這是正常的嗎?

回答

1

是它的正常,地址永遠不會被保存,如果你再次引用這個對象,它不會在那裏。它是你被允許添加字段,只要你想

class A: 
    pass 
a = A() 
a.foo = 1 

無論你應該是一個不同的問題一個對象實例只是Python的qwerk ...

1

在Python中,用戶自定義類型通常是mutable,這意味着它們可以被更改,並且將attribute添加到用戶定義的object就如同將key添加到普通dictionary一樣。你可以檢查這個答案的更多細節are user defined classes mutable

1

是啊正常。 Django會只爲你的

Author()._meta.concrete_fields 

定義

從Django中碼

for field in self._meta.concrete_fields: 
     if field.attname in non_loaded_fields: 
      # This field wasn't refreshed - skip ahead. 
      continue 
     setattr(self, field.attname, getattr(db_instance, field.attname)) 

你可以看到字段的字段做更新,但你不能做到這一點像

Author(name="name", address="sss") 

它會引發無效的爭論。

相關問題