在多项选择模型中计算选择

时间:2018-09-26 11:42:45

标签: python django

class Feedback(models.Model):
    #choices
    NEGATIVE = -1
    NEUTRAL = 0
    POSITIVE = 1
    FEEDBACK_TYPE_CHOICES = (
        (NEGATIVE, 'Negative feedback'),
        (NEUTRAL, 'Neutral feedback'),
        (POSITIVE, 'Postive feedback'),
    )
    #database fields
    short_description = models.CharField('Short opinion: ' ,max_length=100, default='SOME STRING')
    text = models.TextField('Detailed opinion: ', max_length=300, default='SOME STRING')
    feedback = models.IntegerField('Feedback choice: ', max_length=3, choices=FEEDBACK_TYPE_CHOICES, default = 1)
    pub_date = models.DateTimeField('date published')

    #def reputation(self):
    #     return ((self.positivefeedback-self.negativefeedback)/(self.positivefeedback+self.neutralfeedback+self.negativefeedback))*100


class User(models.Model):
    username = models.CharField(max_length=50)
    password = models.CharField(max_length=50)
    email  = models.EmailField(max_length=100)
    eddies = models.IntegerField()
    premium = models.BooleanField()
    feedback = models.ForeignKey(Feedback, on_delete=models.CASCADE)
    def __str__(self):
        return self.username

我正在尝试存档模型OneToMany,其中1个用户可以有多个反馈。如何归档可以计算特定用户反馈结果得分的函数?

2 个答案:

答案 0 :(得分:1)

对于这种关系,“ 用户有很多反馈”,反馈类应该已经存储了它所对应的用户,而不是现在的相反用户。

然后,您可以使用以下方法获取包含特定用户的反馈列表(查询集):

Feedback.objects.filter(user=user_you_want)

其中“ user_you_want”是User类的对象

答案 1 :(得分:1)

我认为您需要按以下方式更改代码,它可能会按您的意愿工作

NEGATIVE = -1
    NEUTRAL = 0
    POSITIVE = 1
    FEEDBACK_TYPE_CHOICES = (
        (NEGATIVE, 'Negative feedback'),
        (NEUTRAL, 'Neutral feedback'),
        (POSITIVE, 'Postive feedback'),
    )

feedback = models.IntegerField('Feedback choice: ', max_length=3, choices=FEEDBACK_TYPE_CHOICES, default = 1)

您正在将默认值1作为整数传递,但是您具有char字段。所以我想这行不通。用我的代码替换 确保您从选择中删除引号,我们需要将值传递为整数