python - one - many-to-many en la pantalla de lista django
many to many filter django (2)
De esta manera puede hacerlo, amablemente revise el siguiente fragmento:
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)
Y en su método de llamada al módulo admin.py de la siguiente manera:
class categories(admin.ModelAdmin):
list_display = (''title'', ''get_parents'', ''when'')
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
Tengo ese código. Desafortunadamente, el error viene en admin.py con "ManyToManyField"
class PurchaseOrderAdmin(admin.ModelAdmin):
fields = [''product'', ''dollar_amount'']
list_display = (''product'', ''vendor'')
El error dice "''PurchaseOrderAdmin.list_display [0]'', ''product'' es un ManyToManyField que no es compatible."
Sin embargo, se compila cuando saco ''producto'' de list_display. Entonces, ¿cómo puedo mostrar ''producto'' en list_display sin darle errores?
editar: ¿Quizás una mejor pregunta sería cómo mostrar un ManyToManyField en list_display?
Es posible que no puedas hacerlo directamente. De la documentación de list_display
Los campos ManyToManyField no son compatibles, porque eso implicaría ejecutar una instrucción SQL separada para cada fila en la tabla. No obstante, si desea hacer esto, proporcione a su modelo un método personalizado y agregue el nombre de ese método a list_display. (Consulte a continuación para obtener más información sobre métodos personalizados en list_display).
Puedes hacer algo como esto:
class PurchaseOrderAdmin(admin.ModelAdmin):
fields = [''product'', ''dollar_amount'']
list_display = (''get_products'', ''vendor'')
def get_products(self, obj):
return "/n".join([p.products for p in obj.product.all()])
O define un método modelo y usa eso
class PurchaseOrder(models.Model):
product = models.ManyToManyField(''Product'')
vendor = models.ForeignKey(''VendorProfile'')
dollar_amount = models.FloatField(verbose_name=''Price'')
def get_products(self):
return "/n".join([p.products for p in self.product.all()])
y en el administrador list_display
list_display = (''get_products'', ''vendor'')