/ / Djangoのバグ-auto_now_addフィールドがNullです-mysql、django、django-models

Djangoバグ - auto_now_addフィールドはNullです - mysql、django、django-models

私のモデルには、カスタム主キーとauto_now_add = TrueのDateTimefieldがあります。

slug = models.CharField(max_length=5, primary_key=True)
created_on = models.DateTimeField(auto_now_add=True)

このフィールドではNull値が許可されていなくても、数百のうちのいくつかのオブジェクトの「created_on」の値がNullであることに気付きました。これがどのように可能であるかについてのアイデアはありますか?

このキーは、このカスタム保存オーバーライドを介してランダムに生成されます。

def save(self, *args, **kwargs):
if self.slug == "":
self.slug = generate_random_slug()
while True:
try:
super(MyClass, self).save(*args, **kwargs)
break
except IntegrityError:
self.slug = generate_random_slug()

回答:

回答№1は0

次のフィールドを持つオブジェクトを保存しようとした場合 primary_key=True そしてもう一つの auto_now_add=True データベースにオブジェクトがすでに存在する場合同じ主キー値を使用すると、DBによってエラーがスローされるか、場合によってはnullに設定されます。スラッグで衝突が発生している可能性が高いようです(5文字の長さで、衝突が非常に簡単に発生するようです)。あなたはおそらく使用したい generate_random_slug 衝突確率が低くなります。何かのようなもの uuid 有用かもしれない。

これは仮説であり、確認するためにさらにコードを確認する必要があります。