【问题标题】:Django models Integrity errorDjango模型完整性错误
【发布时间】:2012-11-15 03:34:23
【问题描述】:
class Subscribers(User):
    date = models.DateField()
    user = models.OneToOneField(User)

class Tour(models.Model):
    """ This is not the id is a User object
    """
    owner_id = models.ForeignKey(User)
    name = models.CharField(max_length=50, primary_key=True)
    location = models.ManyToManyField(Location)
    subscribers = models.ManyToManyField(Subscribers, related_name="sub")

我正在尝试使用以下方法测试方法:

def test_get_subsribers(self):
    user1= User.objects.create_user('Maria','j@j.com','j1')
    user4= User.objects.create_user('Giannis','m@m.com','m1')
    sub= Subscribers()
    sub.user = user4
    tour = Tour()
    tour.owner_id = user1
    tour.name = "Open Day"
    tour.subscribers.add(sub)
    self.assertEqual(get_subscribers("Open Day").count(),0)

但我得到的是一个错误:

IntegrityError: insert or update on table "tour_tour_subscribers" violates foreign key constraint "tour_tour_subscribers_subscribers_id_fkey"
DETAIL:  Key (subscribers_id)=(10) is not present in table "tour_subscribers".

我是 Django 的新手,我不知道如何解决这个问题。

【问题讨论】:

    标签: django django-models relationship integrity


    【解决方案1】:

    您尝试将未保存的订阅者添加到 Tour。

    你需要在tour.subscribers.add(sub)之前调用sub.save()

    tour 也必须在添加 sub 之前保存。

    这样做的原因是处理多对多关系的附加表 (see docs)。此表存储两个外键 - 一个用于Tour,一个用于Subscribers。要将一行保存到此表中,Tour 和 Subscriber 都应该存在于数据库中

    【讨论】:

    • 如果我想在巡演中添加其他订阅者怎么办?
    猜你喜欢
    • 1970-01-01
    • 2013-03-18
    • 2015-08-10
    • 2015-06-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多