Django更新用户';s比率

Django更新用户';s比率,django,rating,Django,Rating,我正在尝试实现一个费率系统,用户只能对(例如这样的人)进行一次费率计算,但他可以更改自己的费率 class Rate(models.Model): class Meta: unique_together = (('sender', 'person'),) choice = models.IntegerField(null=False, blank=False, choices=RATE_CHOICES) sender = models.ForeignK

我正在尝试实现一个费率系统,用户只能对(例如这样的人)进行一次费率计算,但他可以更改自己的费率

class Rate(models.Model):

    class Meta:
        unique_together = (('sender', 'person'),)

    choice = models.IntegerField(null=False, blank=False, choices=RATE_CHOICES)
    sender = models.ForeignKey(User, on_delete=models.CASCADE)
    person = models.ForeignKey(Person, on_delete=models.CASCADE, null=True)
我发现了一些类似unique_的东西,它可以工作——用户只能对其进行一次评分,但我在更改它时遇到了问题

def form_valid(self, form):
        vote, created = Rate.objects.get_or_create(
                        sender=self.request.user, 
                        person=self.get_object(),
                        choice=form.cleaned_data['choice'])
                    

        if not created:
            Rate.objects.filter(sender=self.request.user, person=self.get_object()).update(choice=form.cleaned_data['choice'])
            return super(PersonDetailView, self).form_valid(form)
        else:
            return super(PersonDetailView, self).form_valid(form)
我试过类似上面的方法,但还是有效果

唯一约束失败:main\u rate.sender\u id、main\u rate.person\u id

将尝试使用给定的筛选器检索项,如果找不到,则构造一个新的筛选器。这里的问题是,您在
发送方
人员
选项
上进行筛选,因此如果
选项
与已保存的选项不同,它将尝试构建新的
费率
,因此数据库将拒绝该选项

您可以使用并指定
默认值=…
参数中的
选项

def form_valid(self, form):
    Rate.objects.update_or_create(
        sender=self.request.user, 
        person=self.object,
        defaults={'choice': form.cleaned_data['choice']}
    )
    return super().form_valid(form)
将尝试使用给定的筛选器检索项,如果找不到,则构造一个新的筛选器。这里的问题是,您在
发送方
人员
选项
上进行筛选,因此如果
选项
与已保存的选项不同,它将尝试构建新的
费率
,因此数据库将拒绝该选项

您可以使用并指定
默认值=…
参数中的
选项

def form_valid(self, form):
    Rate.objects.update_or_create(
        sender=self.request.user, 
        person=self.object,
        defaults={'choice': form.cleaned_data['choice']}
    )
    return super().form_valid(form)

你到底用什么样的视角?A
CreateView
?您使用哪种类型的视图?A
CreateView
?非常感谢!工作完美。我没有听说更新或创建。顺便说一句:我在FormMixin中使用DetailView。非常感谢!工作完美。我没有听说更新或创建。顺便说一句:我在FormMixin中使用DetailView。