【问题标题】:django integrity error, many to many relationshipdjango完整性错误,多对多关系
【发布时间】:2012-07-07 11:04:38
【问题描述】:

这是我的models.py:

class User(models.Model):
    email = models.EmailField()

    def __unicode__(self):
        return str(self.email)


class Link(models.Model):
    link = models.URLField()
    users = models.ManyToManyField(User, through='ShortURL')


class ShortURL(models.Model):
    link = models.ForeignKey(Link)
    user = models.ForeignKey(User)
    short_end = models.CharField(max_length=20)
    counter = models.IntegerField() 

添加用户就可以了:

>>> user = User.objects.create("john_doe@planetearth.com")

尝试添加链接时出现完整性错误:

>>> link = Link.objects.create("stackoverflow.com")
IntegrityError: shortener_link.short_end may not be NULL

我错过了什么?

【问题讨论】:

    标签: python django referential-integrity integrity database-integrity


    【解决方案1】:

    你需要像这样创建一个链接:

    Link.objects.create(link="stackoverflow.com", user = request.user, short_end = 'stack', counter = 0)
    

    因为所有这些字段都是必需的。

    【讨论】:

    • 现在我收到另一个错误:回溯(最近一次调用最后一次):文件“”,第 1 行,在 文件“.../django/db/models/manager. py”,第 137 行,在创建中返回 self.get_query_set().create(**kwargs) 文件“.../django/db/models/query.py”,第 375 行,在创建中 obj = self.model(* *kwargs) 文件 ".../django/db/models/base.py", 第 367 行, in init raise TypeError("'%s' is an invalid keyword argument for this function" % kwargs.keys()[0]) TypeError: 'counter' is an invalid keyword argument for this function
    • 该错误意味着您没有在模型中定义计数器字段
    • 是的,但它已定义。在 ShortURL 类中。我很困惑。
    • [link]docs.djangoproject.com/en/dev/topics/db/models披头士乐队的例子有效,我是个不先查找文档的白痴。
    猜你喜欢
    • 1970-01-01
    • 2016-03-22
    • 2016-08-12
    • 2016-03-16
    • 2021-07-06
    • 2012-06-30
    • 1970-01-01
    • 1970-01-01
    • 2013-03-18
    相关资源
    最近更新 更多