0

問題

birthplaceデフォルトが空の文字列に設定されているフィールド を持つモデルが与えられた場合:

class Person(models.Model):
    person_id = models.AutoField(primary_key=True)
    name = models.CharField(max_length=256, blank=False)
    birthplace = models.CharField(max_length=256, blank=True, default="")

...そして、以下を使用してインスタンスを生成するいくつかのコード:

kwargs = {
          "name": json_data.get("name"),
          "birthplace": json_data.get("birthPlace"),
         }

person = models.Person(**kwargs)
person.save()

json_data.get("birthPlace")Django が着信がと評価されるデフォルト値を代用することを期待していましNoneた。しかし、私は得る:

IntegrityError: (1048、「列 '生誕地' を null にすることはできません」)

考えられる解決策

を使用できますjson_data.get("birthPlace", "")が、特に「デフォルト」値が2つ以上の場所で定義されているため、これは非常に非DRYのようです。

または、次のようなものを使用できます。

json_data.get("birthPlace",  Person._meta.get_field_by_name('field_name').default)

...しかし、それでも非常に複雑に感じます (Python の場合)。

この特定の問題にアプローチするための、よりシンプルでエレガントな方法がありませんか?

4

2 に答える 2

0

渡すjson_data.get("birthPlace")ことにより、None 値を強制します (birthPlace が設定されていないか、None の場合)

私は次のいずれかを選択します

1)

birthplace = models.CharField(max_length=256, blank=True, null=True) # null=True instead of default (which makes more sence)

2)

"birthplace": json_data.get("birthPlace") or "",
于 2013-10-10T12:37:48.353 に答える