Django有很多人避免重复

时间:2016-02-13 02:39:24

标签: python django django-models

我在我的路径(多对多)表中得到重复,并希望它只包含唯一的项目。

models.py

class Image(models.Model):
    path = models.CharField(max_length=128)

class User(models.Model):
    username = models.CharField(max_length=32)
    created = models.DateTimeField()
    images = models.ManyToManyField(Image, through='ImageUser')

class ImageUser(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE)
    image = models.ForeignKey(Image, on_delete=models.CASCADE)

但是,我似乎能够使用相同的路径创建多个图像。我想要一个唯一的图像路径指向多个用户,而不在Image表中有重复的图像。

u = User.objects.create(username='AndyApple')
i = Image(path='img/andyapple.jpg')
i.save()
ui = ImageUser(user=u, image=i)
ui.save()

u2 = User.objects.create(username='BettyBanana')
ui = ImageUser(user=u2, image=i)

这似乎在图像表中为同一图像创建了两行。文档表明这不应该发生ManyToManyField.through

谢谢!

1 个答案:

答案 0 :(得分:0)

您确定您的代码会向DELETE t FROM wt_tweets t LEFT JOIN (SELECT tweet_id, MAX(ID) as maxId FROM wt_tweets GROUP BY tweet_id ) tt ON t.tweet_id = tt.tweet_id AND t.id = tt.maxId WHERE tt.tweet_id IS NULL; 添加重复项而不是Image(这是多少对多表的工作原理)吗?

ImageUser

但无论如何,问题不在这里,如果你想:

  

“一个独特的图像路径指向多个用户而没有   图像表中的重复图像。“

然后您必须将字段定义为-------------------- --------------------------- ---------------------------- | Users | | ImageUser | | Image | -------------------- --------------------------- ---------------------------- | id | username | | id | user_id | image_id | | id | path | -------------------- --< --------------------------- >-- ---------------------------- | 1 | AndyApple | | 1 | 1 | 1 | | 1 | 'img/andyapple.jpg' | -------------------- --------------------------- ---------------------------- | 2 | BettyBanana | | 2 | 2 | 1 | -------------------- --------------------------- ,请参阅下面的代码示例。在这种情况下,如果您尝试使用已存在于DB中的路径保存图像,则将引发异常。但请注意,在这种情况下,如果两个用户上传不同的图像,但名称相同,则上次上传的图像将用于两个用户。

unique