0
Djangoのget_or_createで問題が発生しました。同じ日付で同じオブジェクトを作成すると完全性エラーがポップアップします。DateFieldを使用したIntegrityError - get_or_createでオブジェクトを作成するとき
私のモデルには次のようなフィールドがあります。私はカートに同じオブジェクトを追加しようとすると、
class Cart(models.Model):
created = models.DateTimeField(
pgettext_lazy('Cart field', 'created'), auto_now_add=True)
last_status_change = models.DateTimeField(
pgettext_lazy('Cart field', 'last status change'), auto_now_add=True)
user = models.ForeignKey(
settings.AUTH_USER_MODEL, blank=True, null=True, related_name='carts',
verbose_name=pgettext_lazy('Cart field', 'user'))
email = models.EmailField(
pgettext_lazy('Cart field', 'email'), blank=True, null=True)
def add(self,hoarding, date_from, date_until):
cart_line, created = self.lines.get_or_create(
hoarding=hoarding,date_from=date_from,date_until=date_until)
class Meta:
ordering = ('-last_status_change',)
verbose_name = pgettext_lazy('Cart model', 'Cart')
verbose_name_plural = pgettext_lazy('Cart model', 'Carts')
def __str__(self):
return smart_str(self.user)
class CartLine(models.Model):
cart = models.ForeignKey(
Cart, related_name='lines',
verbose_name=pgettext_lazy('Cart line field', 'cart'))
hoarding = models.ForeignKey(
Hoarding, related_name='+',blank=True, null=True,
verbose_name=pgettext_lazy('Cart line field', 'hoarding'))
date_from = models.DateField(blank=True, null=True,
verbose_name=pgettext_lazy('Cart line field', 'from'))
date_until = models.DateField(blank=True, null=True,
verbose_name=pgettext_lazy('Cart line field', 'until'))
class Meta:
unique_together = ('cart', 'date_from', 'date_until')
verbose_name = pgettext_lazy('Cart line model', 'Cart line')
verbose_name_plural = pgettext_lazy('Cart line model', 'Cart lines')
エラーが発生し、同じ日付からと日付まで:
IntegrityError at /hoardings/hoardings-demo-2-5/add/
UNIQUE constraint failed: cart_cartline.cart_id, cart_cartline.date_from, cart_cartline.date_until
get_or_create
はdates.Iが一意追加したのと同じでオブジェクトを作成IntegrityErrorを返します。 datefieldには機能がありますが、同じエラーがあります。私はDjango 1.11とPython 2.7を使用します
私はデータベースを数回リセットしますが、それは役に立たない、dbはPostgres/sqliteです。
モデルの「メタ」クラスに何か書いてありますか? – zaidfazil
あなたが投稿したモデルコードには、統一的な制約はありません。あなたは完全なコードを投稿しなかったか、またはユニベゖメントの制約がdbレベルなどで宣言されていましたが、このコードだけでエラーを再現することはできません。 –
@zaidfazilクラス 'メタ 'が追加されました。どうぞご覧ください。 –