[英]Django: Count of ManyToMany field in PositiveIntegerField during save() in a models.py
我想在保存模型期间更改ManyToMany字段的计数。 为此,我修改了save()。 如果我运行save(),count将不会更新。 如果我第二次运行保存而不更新该字段,它将更新计数。
class UserProfile(models.Model):
follower = models.ManyToManyField('self', related_name='Followers',
blank=True, symmetrical=False)
following = models.ManyToManyField('self', related_name='Followings',
blank=True, symmetrical=False)
follower_count = models.PositiveIntegerField(null=True, blank=True,
editable=False)
following_count = models.PositiveIntegerField(null=True, blank=True,
editable=False)
class Meta:
verbose_name = 'User Profile'
verbose_name_plural = 'User Profiles'
def __str__(self):
return self.follower_count
def save(self, *args, **kwargs):
super(UserProfile, self).save(*args, **kwargs)
self.following_count = self.following.all().count()
self.follower_count = self.follower.all().count()
super(UserProfile, self).save(*args, **kwargs)
我想用save()更新计数。
def save(self, *args, **kwargs):
self.following_count = self.following.all().count()
super(UserProfile, self).save(*args, **kwargs)
首先获取计数,然后调用保存方法
您可以省略第一次保存,例如:
def save(self, *args, **kwargs):
self.following_count = self.following.count()
self.follower_count = self.follower.count()
super(UserProfile, self).save(*args, **kwargs)
话虽如此,但由于以下几个原因,我不能完全确定上面的方法是一个好主意:
如果性能不成问题,则可以将两个字段都转换为可计算每次访问值的属性
class UserProfile(models.Model):
follower = models.ManyToManyField('self', related_name='Followers',
blank=True, symmetrical=False)
following = models.ManyToManyField('self', related_name='Followings',
blank=True, symmetrical=False)
@cached_property
def follower_count(self):
return self.follower.count()
@cached_property
def following_count(self):
return self.following.count()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.