Django使用来自ForeignKey的属性填充ChoiceField

时间:2014-07-17 20:22:01

标签: python django

请放轻松我,因为我刚开始。我正在建立一个仪器网站,人们可以在那里发布他们的乐器。在表格上,我希望他们使用一个下拉菜单,有助于选择一个类别(如长号,小号,萨克斯等......)

当我使用以下代码时,我会在下拉列表中看到类似的内容:


类别对象 类别对象 类别对象

这些似乎是正确的类别对象,但我需要的是他们说"小号","长号","萨克斯管"来自数据库。

表格

class InventoryForm(forms.Form):
  description = forms.CharField(required=False)
  instrumentCategory = forms.ModelChoiceField(queryset=pmod.Category.objects.all())

模型

class Category(models.Model):
    instrumentCategory=models.CharField(max_length=50,blank=True,null=True)

class Instrument(models.Model):
    description=models.CharField(max_length=1000,blank=True,null=True)
    instrumentCategory=models.ForeignKey(Category)

同样,如何让下拉列表显示仪器类别而不是"类别对象"对于每个选项?提前致谢

2 个答案:

答案 0 :(得分:2)

在模型上实现__unicode__({3}中的__str__)以返回您想要在选择列表中看到的内容:

class Category(models.Model):
    instrumentCategory=models.CharField(max_length=50,blank=True,null=True)

    def __unicode__(self):
        return self.instrumentCategory

这是因为Django并不自动知道你想如何表示每个对象。

查看此处提到的python_to_unicode_compatible装饰器:https://docs.djangoproject.com/en/dev/internals/contributing/writing-code/coding-style/#model-style

答案 1 :(得分:0)

完美!上面的代码是正确的,但我只需将其添加到我的模型中:

def __str__(self):
    return self.instrumentCategory