获取外键关系的对象以在Django中显示

时间:2013-07-31 20:02:54

标签: python django admin

此图像出现此问题 http://i.imgur.com/oExvXVu.png

我希望它能够在框中显示VendorProfile名称而不是VendorProfile对象。我在VendorProfile中使用PurchaseOrder的外键关系。 这是我在models.py中的代码:

class PurchaseOrder(models.Model):
   product = models.CharField(max_length=256)
   vendor = models.ForeignKey('VendorProfile')
class VendorProfile(models.Model):
   name = models.CharField(max_length=256)
   address = models.CharField(max_length=512)
   city = models.CharField(max_length=256)

这是我在admin.py中的代码:

class PurchaseOrderAdmin(admin.ModelAdmin):
   fields = ['product', 'dollar_amount', 'purchase_date','vendor', 'notes']
   list_display = ('product','vendor', 'price', 'purchase_date', 'confirmed', 'get_po_number', 'notes')

那么如何让它在两个字段和list_display中显示VendorProfile的'name'?

2 个答案:

答案 0 :(得分:3)

为返回名称的VendorProfile方法定义__unicode__方法。

来自文档:

  

只要在对象上调用__unicode__(),就会调用unicode()方法。 Django在许多地方使用unicode(obj)(或相关函数,str(obj))。最值得注意的是,在Django管理站点中显示一个对象,并在显示一个对象时将值插入到模板中。因此,您应该始终从__unicode__()方法返回一个漂亮的,人类可读的模型表示。

class VendorProfile(models.Model):
    # fields as above

    def __unicode__(self):
        return self.name

答案 1 :(得分:2)

最简单的方法是在类中添加一个unicode函数,返回要在下拉列表中显示的值:

class PurchaseOrder(models.Model):
   product = models.CharField(max_length=256)
   vendor = models.ForeignKey('VendorProfile')

   def __unicode__(self):
       return self.product

class VendorProfile(models.Model):
   name = models.CharField(max_length=256)
   address = models.CharField(max_length=512)
   city = models.CharField(max_length=256)

   def __unicode__(self):
       return self.name

然后,将在管理员下拉列表中显示供应商名称。