我的模型结构如下:
from django.db import models
class Follow(models.Model):
follower = models.ForeignKey('accounts.User', related_name='following',
on_delete=models.CASCADE)
user = models.ForeignKey('accounts.User', related_name='followers',
on_delete=models.CASCADE)
class Meta:
unique_together = (('user', 'follower',),)
def __str__(self):
return f'{self.follower.username} follows {self.user.username}'
我正在寻找与“ unique_together”相似但针对同一用户的东西。 我知道有可能在API中阻止它,但我希望它从模型级别开始。
答案 0 :(得分:1)
您可以:
clean()
或save()
以确保follower != user
,答案 1 :(得分:0)
在这里可以重写save
方法。在模型保存方法中,如果关注者和用户相同,则可以检查并引发异常。我认为您不能使用任何约束作为unique_together来做到这一点。
答案 2 :(得分:0)
感谢您的回答,但我是这样做的。
from django.dispatch import receiver
from django.db import models
from django.db.models.signals import pre_save
from django.core.exceptions import ValidationError
class Follow(models.Model):
follower = models.ForeignKey('accounts.User', related_name='following',
on_delete=models.CASCADE)
user = models.ForeignKey('accounts.User', related_name='followers',
on_delete=models.CASCADE)
class Meta:
unique_together = (('user', 'follower',),)
def __str__(self):
return f'{self.follower.username} follows {self.user.username}'
@receiver(pre_save, sender=Follow)
def check_self_following(sender, instance, **kwargs):
if instance.follower == instance.user:
raise ValidationError('You can not follow yourself')