首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用DateField创建对象时使用DateField的Django

用DateField创建对象时使用DateField的Django
EN

Stack Overflow用户
提问于 2017-09-04 09:55:58
回答 1查看 394关注 0票数 0

我对Django的get_or_create有一个问题,当我创建相同日期的相同对象时,会弹出完整性错误。

我的模型中有如下字段。

代码语言:javascript
复制
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')

当我试图向购物车中添加相同的对象(从日期到日期)时出现错误:

代码语言:javascript
复制
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将返回一个IntegrityError,我在datefield中添加了唯一的特性,但得到了相同的错误。我使用Django 1.11和Python2.7

我重置了几次数据库,但没有用,db是Postgres/sqlite。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-09-12 10:46:55

unique_together在CartLine模型中是导致完整性的issue.Remove这一行,然后迁移。

代码语言:javascript
复制
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')
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46034569

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档