我相對較新的Django,所以我不知道如果我問的可能。Django:查詢和計算裏面CreateView
我正在構建一個功能的網站,爲用戶評分和寫評論。我有用戶模型(具有平均評級字段)和評論模型(字段爲author
,user_profile
,grade
和review
)。我正在使用CreateView
進行評論。
我努力做到以下幾點:
要查詢來獲取該人的所有以前的等級(從
Reviews
模型)。進行計算(和所有以前的成績,通過等級的數量增加了新的,所有的鴻溝(包括新等級))
保存新的平均檔次
UserProfile
模型儲存檢閱到
Reviews
模型重定向用戶對當前細節視圖
Models.py
class UserProfile(models.Model):
...
avg_grade = models.FloatField(blank=True, null=True)
...
class Reviews(models.Model):
user_profile = models.ForeignKey(UserProfile, on_delete=models.CASCADE)
grade = models.PositiveIntegerField()
review = models.CharField(max_length=256, null=True, blank=True)
author = models.CharField(max_length=256)
在views.py
我設法讓用戶的成績查詢,但不知道從哪裏新的平均品位做計算(如果這是可能的內部基於類 - 視圖):
class CreateReview(LoginRequiredMixin, CreateView):
form_class = Forma_recenzije
success_url = reverse_lazy('detail')
template_name = 'accounts/recenzija.html'
def get_queryset(self):
u = UserProfile.objects.get(id=int(self.kwargs['pk']))
return Reviews.objects.filter(user_profile=u)
def form_valid(self, form):
form.instance.author = self.request.user
form.instance.user_profile = UserProfile.objects.get(id=int(self.kwargs['pk']))
return super(CreateReview, self).form_valid(form)
URL模式:
[...
url(r'^dadilje/(?P<pk>[-\w]+)/$', views.DadiljaDetailView.as_view(), name="detail"),
url(r'^dadilje/(?P<pk>[-\w]+)/recenzija$', views. CreateReview.as_view(), name="recenzije")
...
]
我投票建議使用註釋來建立一個UserProfile模型來存儲它。存儲該計算值可能是不成熟的優化。除非用戶有大量評論(數十萬+取決於數據庫規範),否則評註可能表現不錯。 –
謝謝,這就是我一直在尋找和它的作品。我遇到了一些問題,因爲我給了模型並查看了相同的名稱。 我知道註釋方法並在之前使用它,但現在我希望能夠使用order_by()方法對數據進行排序,並且無法再使用它。 –
您*可以*在註釋字段上訂購。是的,我會避免在模型和視圖中使用相同的名稱。建議在模型名稱中使用單數(例如'Review'而不是'Reviews'(我在這種情況下意識到'Review'是您的實際型號名稱的翻譯) – Alasdair