如何从对象中检索变量以在Django中更新它?

时间:2015-03-10 11:01:00

标签: python django

我有一个模型分数,其中q-id为列。 例如:

class Score(models.Model):
    group_id = models.ForeignKey(Group)
    name = models.CharField(max_length=60)
    gender = models.CharField(max_length=1,default = False )
    q1 = models.DecimalField(max_digits=20,decimal_places=8)
    q2 = models.DecimalField(max_digits=20,decimal_places=8)
    .
    .
    q100 = models.DecimalField(max_digits=20,decimal_places=8)

现在我想访问q(q1到q100)的值并更新值。

def ballot_update(request,group_id,q_id):
group = get_object_or_404(Group, pk=group_id)
if request.POST:
    vote = request.POST.get('vote')
    q_id = 'q'+ q_id
    score = Score.objects.get(pk=vote)
    newscore = 10 + score.q_id
    s_update = Score.objects.filter(pk=vote).update(**{q_id:newscore})
return ballot_home(request,group_id)     

我收到错误'Score'对象没有属性'q_id'

附件是快照http://i.stack.imgur.com/5T0Xa.png enter image description here

2 个答案:

答案 0 :(得分:2)

您应该使用getattr()按名称获取对象的属性:

newscore = 10 + getattr(score, q_id)

答案 1 :(得分:2)

我想你应该改变你的模型:

class Score(models.Model):
    group_id = models.ForeignKey(Group)
    name = models.CharField(max_length=60)
    gender = models.CharField(max_length=1,default = False )

class Qs(models.Model):
    score = models.ForeignKey(Score)
    number = models.IntegerField()
    q_value = models.DecimalField(max_digits=20,decimal_places=8)

然后你的模型中没有100个q_is。您可以轻松访问q值。