将Django ModelForm与FK结合使用

时间:2015-03-31 13:59:42

标签: python django foreign-keys modelform

我会为我糟糕的英语道歉,但这不是我的母语。无论如何...     我是Python / Django的初学者,我尝试做一个表单应用程序,而且我无法正常使用ForeignKeys。例如:我有一个名为Station的表和另一个名为Person的表。在Person Table中,我得到了一个引用Station表的Station字段。我的表单工作正常,但信息的显示并不适用。当我打开ModelChoiceField时,它不是显示Station的名称或ID,而是在每个对象中向我显示:。有没有办法(可能)定义哪个字段会出现在我的表格上?这些是我的文件:

MODELS.PY:

class Person(models.Model):
    first_name = models.CharField(max_length=50)
    last_name = models.CharField(max_length=50)
    station = models.ForeignKey("Station")
    def __unicode__(self):
    return "{0} {1}".format(self.first_name, self.last_name)

class Station(models.Model):
    station_name = models.CharField(max_length=50)
    def __unicode(self):
    return str(self.station_name)

    FORMS.PY:
    class FormPerson(forms.ModelForm):
    class Meta:
    model = Person

VIEWS.PY:

def addperson(request):
    if request.method == "POST":
    form = FormPerson(request.POST, request.FILES)
    if form.is_valid():
    form.save()
    return render_to_response("salvo.html",{})
    else:
    form = FormPerson()
    return render_to_response("adiciona.html", {'form': form},
    context_instance=RequestContext(request))

ADICIONA.HTML:

<form action="" method="post">
{% csrf_token %}
{{ form.as_p }}
<button type="submit">Adicionar</button>
</form>

1 个答案:

答案 0 :(得分:1)

你有一个关于Station的__unicode__方法的错字(它只有半魔法;)。

必须如此:

class Station(models.Model):
    station_name = models.CharField(max_length=50)
    def __unicode__(self):
        return self.station_name