我正在建立一个像Instagram一样的应用程序,并试图制作一个类似的模型。每个用户都可以喜欢一个帖子,但是不可能两次都喜欢相同的帖子。
class Like(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE)
post = models.ForeignKey(Post, on_delete=models.CASCADE)
created = models.DateTimeField(auto_now_add=True)
这是我的模型,但是我能够创建2个相同的对象。例如,用户1可以有2个类似对象,如发布1。
有没有办法做到这一点?
是的,您可以使用[Django-doc]将and字段的组合标记为唯一:user
post
UniqueConstraint
class Like(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE)
post = models.ForeignKey(Post, on_delete=models.CASCADE)
created = models.DateTimeField(auto_now_add=True)
class Meta:
constraints = [
models.UniqueConstraint(fields=['user', 'post'], name='like_once')
]
在django-2.2之前,您可以使用unique_together
[Django-doc]选项:
class Like(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE)
post = models.ForeignKey(Post, on_delete=models.CASCADE)
created = models.DateTimeField(auto_now_add=True)
class Meta:
unique_together = [['user', 'post']]
注意:通常,最好使用
settings.AUTH_USER_MODEL
[Django-doc]来引用用户模型,而不是直接使用User
模型[Django-doc]。有关更多信息,请参见参考User
文档的“模型”部分。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句