簡體   English   中英

如何在Django視圖中基於外鍵過濾模型數據?

[英]How can I filter models data based on the foreign key in Django views?

我有兩個模型,分別是User和UserRating,它們之間是一對多的關系,如何過濾特定用戶的評分,以便可以計算出其總體評分並將其顯示在個人資料中。 謝謝。

#this is model for user
class User(models.Model):
    username = models.CharField(max_length=128, unique=True)
    email = models.EmailField(max_length=128, unique=True)
    #password = forms.CharField(max_length=32, widget=forms.PasswordInput)
    profilepic = models.ImageField(null=True)
    firstname = models.CharField(max_length=128, null=True)
    secondname = models.CharField(max_length=128, null=True)
    city = models.ForeignKey(City)


#this is the model for user ratings - one to many relationship with User
class UserRating(models.Model):
    user = models.ForeignKey(User)
    comment = models.CharField(max_length=500)
    rating = models.IntegerField(default=5)

如果您有一個User對象,則可以通過反向關系訪問其所有評分:

user.userrating_set.all()

要計算他的平均評分,請使用Aggregation

from django.db.models import Avg
user.userrating_set.all().aggregate(Avg('rating'))

編輯

如果要將其作為用戶模型的屬性,請執行以下操作:

class User(models.Model):
    username = models.CharField(max_length=128, unique=True)
    ... 

    @property
    def avg_rating(self):
        return self.userrating_set.all().aggregate(Avg('rating'))

然后您可以使用

user.avg_rating

編輯 -已更新,因此您可以除以評分數

在視圖中...

from django.db.models import Sum

current_user_rating_object = UserRating.objects.filter(user=request.user)
ratings = current_user_rating_objects.count()
total_rating = current_user_rating_object.aggregate(Sum(total_rating=Sum('rating', distinct=True))['total_rating']
weighted_rating = total_rating / ratings

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM