我有一个模型分数,其中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'
答案 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值。