Django:访问其他模块中的相关字段

2024-05-16 04:11:38 发布

您现在位置:Python中文网/ 问答频道 /正文

我有下面的

class Chore(models.Model):
  title = models.CharField(max_length=300)
  reward = models.PositiveIntegerField( default= 1)
  def __str__(self):
    return self.title
class Child(models.Model):
  created_by = models.ForeignKey(User,on_delete=models.PROTECT, blank = True, null = True)
  name = models.CharField(max_length=300)
  age = models.DecimalField (max_digits=2, decimal_places=1, default=3.0, blank = True )

class ChildChore(models.Model):
  child = models.ForeignKey(Child, on_delete=models.PROTECT) 
  chore = models.ForeignKey(Chore, on_delete=models.PROTECT)
  points = models.PositiveIntegerField( default= 0,  blank = True, null = True)

形式:

class ProgressForm(ModelForm):
  class Meta:
    model = ChildChore 
    exclude = ()
ProgressFormSet = modelformset_factory(ChildChore, form=ProgressForm, extra=0, can_delete=[False]) 

html页:

{{ formset.management_form }}
{% for form in formset %}
  {{form.chore}} # will return the title
  {{form.child}} # will return the child name
  {{form.points}}

查看:

def ProgressCreate(request, cid):
template_name = 'chore/progress_form.html'

if request.method == 'GET':
    formset = ProgressFormSet(queryset=ChildChore.objects.filter(child=cid))
elif request.method == 'POST':
    formset = ProgressFormSet(request.POST)
    if formset.is_valid():
        for form in formset:
            # only save if name is points
            if form.cleaned_data.get('points'):
                form.save()
        return redirect('children-list')    
    else:
        print (formset.errors) 

return render(request, 'chore/progress_form.html', {'formset': formset})

我这里的问题是如何获得模板中的其他模型字段?例如,我想要家务劳动模型的“奖励”,我需要孩子的“年龄”。 类似于{form.child.age}的操作将不起作用,在子模型中创建一个函数来返回age也不起作用。 我试着


Tags: nameformchildtruemodelreturnifmodels