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
?您使用哪种类型的视图?ACreateView
?非常感谢!工作完美。我没有听说更新或创建。顺便说一句:我在FormMixin中使用DetailView。非常感谢!工作完美。我没有听说更新或创建。顺便说一句:我在FormMixin中使用DetailView。