表单ModelChoiceField显示

时间:2014-08-06 17:15:48

标签: python django forms

我正在尝试构建一个链接到两个模型表的简单表单。 这是我的模型声明:

model.py

class THost(models.Model):
    name = models.CharField(max_length=45, blank=True)
    Location = models.ForeignKey('TLocation', db_column='idLocation')

class TLocation(models.Model):
    name = models.CharField(max_length=45, blank=True)
    address = models.TextField(blank=True)
    zipcode = models.CharField(max_length=45, blank=True)
    city = models.CharField(max_length=45, blank=True)
    country = models.CharField(max_length=45, blank=True)

我的forms.py

class hostForm(forms.ModelForm):
    Location = forms.ModelChoiceField(queryset=TLocation.objects.all())
    class Meta:
        model = THost

我的views.py

   form1 = hostForm()
   if request.method == "POST":
      form1 = hostForm(request.POST)
      if form1.is_valid:
        form1.save()

问题是,我现在有一个下拉列表显示几个lignes:“TLocation object”。 我无法弄清楚如何只显示TLocation名称或城市

感谢您的帮助!

3 个答案:

答案 0 :(得分:1)

在models.py中:

在顶部:

from __future__ import unicode_literals

在模型课之前:

@python_2_unicode_compatible
class YourModel(models.Model):

并在模型类中:

def __str__(self):
    """
    Return the representation field or fields.
    """
    return '%s' % self.name

答案 1 :(得分:1)

谢谢@petkostas!我正在寻找一些复杂的东西而python不是:)

这是我推杆:

class TLocation(models.Model):
    name = models.CharField(max_length=45, blank=True)
    address = models.TextField(blank=True)
    zipcode = models.CharField(max_length=45, blank=True)
    city = models.CharField(max_length=45, blank=True)
    country = models.CharField(max_length=45, blank=True)

    def __unicode__(self):
        return u'%s - %s' % (self.name, self.city)

结果是一个带有" name - city"

的下拉列表

非常感谢你

答案 2 :(得分:0)

尝试自定义ModelChoiceField并覆盖label_from_instance。此方法将接收模型对象,并应返回适合表示它的字符串:

class MyModelChoiceField(ModelChoiceField):
    def label_from_instance(self, obj):
        return obj.name


class hostForm(forms.ModelForm):
    Location = forms.MyModelChoiceField(queryset=TLocation.objects.all())
    class Meta:
        model = THost