我对 Django 比较陌生,所以我不确定我要问的是否可行。
我正在建立一个网站,该网站具有对用户进行评分和撰写评论的功能。我有用户模型(具有平均评分字段)和评论模型(具有、 和author
字段user_profile
)。我用来做评论。grade
review
CreateView
我正在尝试执行以下操作:
进行查询以获取该人以前的所有成绩(来自
Reviews
模型)。进行计算(将所有以前的成绩相加,将新的成绩相加,然后除以成绩数(包括新成绩))
将新的平均成绩保存到
UserProfile
模型将评论保存到
Reviews
模型将用户重定向到当前详细视图
模型.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(r'^dadilje/(?P<pk>[-\w]+)/$', views.DadiljaDetailView.as_view(), name="detail"),
url(r'^dadilje/(?P<pk>[-\w]+)/recenzija$', views. CreateReview.as_view(), name="recenzije")
...
]