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
Yo tengo ese codigo. Desafortunadamente, el error viene en admin.py con elManyToManyField
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 'product'
de list_display
. Entonces, ¿cómo puedo mostrar 'product'
en list_display
sin darle errores?
Editar : Tal vez una mejor pregunta sería ¿cómo mostrar una ManyToManyField
en list_display
?
fuente
get_queryset()
método optimizado para ustedModelAdmin
, consulte stackoverflow.com/questions/12354099/…cached_property
ayudaría. Pero creo que probablemente no lo haría. Cuando usa un optimizadoget_queryset
, puede, por ejemplo, anotar / preprocesar los datos allí, como hacer la concatenación de productos en SQL en lugar de en Django, y almacenar sus datos personalizados en su conjunto de consultas. Entonces solo necesitaría ejecutar esa lógica una vez en SQL y no para cada fila cuando se acceda a la propiedad.get_queryset
, simplemente no he podido leer los documentos completos (ni encontré un ejemplo lo suficientemente simple de lo que debería estar haciendo)De esta manera, puede hacerlo, consulte 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 del módulo admin.py de la siguiente manera:
class categories(admin.ModelAdmin): list_display = ('title', 'get_parents', 'when')
fuente