Django:如何从模型表单中选择外键ID?

时间:2017-08-02 20:57:14

标签: django django-forms

Django初学者在这里。说我有以下型号:

    class Mom(models.Model):
        name = models.CharField(max_length=25)

    class Dad(models.Model):
        name = models.CharField(max_length=25)

    class Child(models.Model):
        name = models.CharField(max_length=25, unique=True)
        mom = models.ForeignKey(Mom)
        dad = models.ForeignKey(Dad)

现在说我有一个表格,我可以选择妈妈和爸爸的组合,我想生成他们在一起的孩子的清单。

class ChildChooser(forms.ModelForm):

    class Meta:
        model = Child
        fields = ['mom', 'dad']

所以我定义了一个视图:

def myChildChooserView(request):
    if request.method=='POST':
        form=ChildChooser(request.POST)
        if form.is_valid():
            myMom=form.cleaned_data['mom']
            myDad=form.cleaned_data['dad']

            return HttpResponseRedirect(reverse('kid-list', kwargs={'mom':myMom,                                                                               
                                                       'dad':myDad} ))

    else:
        form = RawYarnChooser()

        return render(request, 'chooser.html', {'form':form})

我希望可以利用我定义的网址:

url(r'^kids/(?P<mom>[0-9]+)/(?P<dad>[0-9]+)/$',views.kidList, name='kid-list'),

问题是网址需要“妈妈”的主键。和爸爸&#39;在表格上选择。表单返回选择的文本。什么是pythonic方式从表单上的选择中获取主键号,以便我可以将它们提供给Http Response Redirect的kwargs?

我提出的解决方案是(在视图中)用以下内容ping数据库:

mom_for_kwargs=Mom.objects.get(name=myMom)
dad_for_kwargs=Dad.objects.get(name=myDad)

然后从那些获取id。但这似乎是一种非常迂回的方式。只是想知道是否有更好的方法。

谢谢!

1 个答案:

答案 0 :(得分:1)

这应该只是> sub("\\..*$","",mydata$Gene) [1] "ENSG00000000419" "ENSG00000000460" > - kwargs={'mom': myMom.id, 'dad': myDad.id}模型字段的默认表单字段类型是ForeignKey,它应该从ModelChoiceField返回一个模型实例。