我正在尝试构建一个链接到两个模型表的简单表单。 这是我的模型声明:
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名称或城市
感谢您的帮助!
答案 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