2016-11-30 5 views
0

これはバグですか、Djangoはちょうどそれが起こることを可能にするかどうかは知りません。、存在しないフィールドでモデルインスタンスを保存

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

私はそれのインスタンスを作成し、存在しないフィールドaddressに値を割り当てる:

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

インスタンスが正常に保存され、エラーメッセージがない私は、Djangoのモデルを持っています。これは正常ですか?通常の

答えて

1

はい、アドレスは決して実際に保存されます、あなたは再び、このオブジェクトを参照した場合、それはそこではないでしょう。あなたは、あなたがしなければならない別の問題であるかどうかは

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

いつでもオブジェクトインスタンスにフィールドを追加することが許可されている。そのちょうどそのPythonのqwerk ... Pythonで

1

は、ユーザーが定義しますタイプは一般的にmutableであり、変更可能であり、ユーザ定義のobjectattributeを追加することは、通常dictionarykeyを追加するのと同じです。あなたは、より詳細are user defined classes mutable

1

うん通常、この答えを確認することができます。 Djangoは唯一あなたが

Author()._meta.concrete_fields 

でフィールドを表示することができますしかし、あなたは

Author(name="name", address="sss") 
のようにこれを行うことはできませんあなたが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)) 

から

を定義したフィールドの更新を行います

これは、無効な引数が発生します。

関連する問題