問題
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 の場合)。
この特定の問題にアプローチするための、よりシンプルでエレガントな方法がありませんか?