列表中的多对多显示django
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了列表中的多对多显示django相关的知识,希望对你有一定的参考价值。
class PurchaseOrder(models.Model):
product = models.ManyToManyField('Product')
vendor = models.ForeignKey('VendorProfile')
dollar_amount = models.FloatField(verbose_name='Price')
class Product(models.Model):
products = models.CharField(max_length=256)
def __unicode__(self):
return self.products
我有那个代码。不幸的是,错误来自admin.py和ManyToManyField
class PurchaseOrderAdmin(admin.ModelAdmin):
fields = ['product', 'dollar_amount']
list_display = ('product', 'vendor')
错误说:
'PurchaseOrderAdmin.list_display [0]','product'是不受支持的ManyToManyField。
然而,当我从'product'
拿出list_display
时,它编译。那么如何在'product'
中显示list_display
而不给它错误?
编辑:也许更好的问题是如何在ManyToManyField
中显示list_display
?
答案
您可能无法直接执行此操作。 From the documentation of list_display
不支持ManyToManyField字段,因为这将需要为表中的每一行执行单独的SQL语句。如果您想要这样做,请为您的模型提供自定义方法,并将该方法的名称添加到list_display。 (有关list_display中自定义方法的更多信息,请参阅下文。)
你可以这样做:
class PurchaseOrderAdmin(admin.ModelAdmin):
fields = ['product', 'dollar_amount']
list_display = ('get_products', 'vendor')
def get_products(self, obj):
return "
".join([p.products for p in obj.product.all()])
或者定义一个模型方法,然后使用它
class PurchaseOrder(models.Model):
product = models.ManyToManyField('Product')
vendor = models.ForeignKey('VendorProfile')
dollar_amount = models.FloatField(verbose_name='Price')
def get_products(self):
return "
".join([p.products for p in self.product.all()])
并在管理员list_display
list_display = ('get_products', 'vendor')
另一答案
通过这种方式,您可以查看以下代码段:
class Categories(models.Model):
""" Base category model class """
title = models.CharField(max_length=100)
description = models.TextField()
parent = models.ManyToManyField('self', default=None, blank=True)
when = models.DateTimeField('date created', auto_now_add=True)
def get_parents(self):
return ",".join([str(p) for p in self.parent.all()])
def __unicode__(self):
return "{0}".format(self.title)
并在您的admin.py模块调用方法如下:
class categories(admin.ModelAdmin):
list_display = ('title', 'get_parents', 'when')
以上是关于列表中的多对多显示django的主要内容,如果未能解决你的问题,请参考以下文章
Django - 查询列表中的任何项目在多对多字段中的任何对象
CASCADE 究竟如何与 Django 中的多对多字段一起工作