我在我的路径(多对多)表中得到重复,并希望它只包含唯一的项目。
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
谢谢!
答案 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