我想知道如何在单个模型中将一个字段值传递给另一个字段值。我需要过滤 Rating
对象以获得产品的平均评分,并且希望将其与其他 future 统计信息一起显示在 ProductStat
中。
我尝试进行过滤,这不会让我进行迁移,因为一些“模型尚未加载”
appregistry 错误,但如果我注释掉avgRating
它有效。
class ProductStat(models.Model):
productID = models.ForeignKey('Product')
avgRating = models.IntegerField(
default = Rating.objects.filter(product=productID).aggregate(Avg('rating'))['rating__avg']
)
class Rating(models.Model):
user = models.ForeignKey(settings.AUTH_USER_MODEL)
product = models.ForeignKey('Product')
rating = models.IntegerField(default = 3)
所以我的问题是:如何使 ProductStat.avgRating
按 ProductStat.product
过滤评级?
最佳答案
解释模型文件时,Rating
模型不存在。另外,您不应该使用函数作为默认值,请使用 callable相反。
def avg_rating():
return Rating.objects.filter(product=productID).aggregate(Avg('rating'))['rating__avg']
class ProductStat(models.Model):
productID = models.ForeignKey('Product')
avgRating = models.IntegerField(
default = avg_rating
)
This answer可以帮助。您还可以查看docs在 Django 页面中可以找到此信息。
<小时/>如果您需要使用当前 ProductStat
对象中的值,您可以使用 signal 。在您的models.py中:
from django.db.models.signals import pre_save
class ProductStat(models.Model):
productID = models.ForeignKey('Product')
avgRating = models.IntegerField()
def set_avg_rating(sender, instance, *args, **kwargs):
avg = Rating.objects.filter(product=instance.productID).aggregate(Avg('rating'))['rating__avg']
instance.avgRating = avg
pre_save.connect(set_avg_rating, sender=ProductStat)
关于python - 如何从模型内部访问模型字段值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36139693/