2017-09-04 6 views
0

Django의 get_or_create에 문제가 있습니다. 동일한 날짜의 동일한 객체를 만들 때 무결성 오류가 팝업됩니다.Django IntegrityError with DateField - 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을 사용합니다.

데이터베이스를 몇 번 재설정했지만 데이터베이스가 Postgres/sqlite가 아니 었습니다.

+0

get_or_create 개체를 추가하려는 코드를 추가하십시오. 그리고 수동으로 date_from/date_until에 CartLine (cart, date_from, date_until) 또는 unique = True에 대한 Meta에 복잡한 기본 키를 추가하지 않았습니까? –

+0

가지고 계시다면'meta' 클래스를 추가 하시겠습니까? –

+0

게시 한 코드에는이 모델에 고유 한 제약 조건이 없습니다. 전체 코드를 입력하십시오. –

답변

0

unique_together (CartLine 모델에서 무결성 문제가 발생하고 있습니다. 해당 행을 제거한 다음 마이그레이션하십시오.

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: 
     verbose_name = pgettext_lazy('Cart line model', 'Cart line') 
     verbose_name_plural = pgettext_lazy('Cart line model', 'Cart lines')