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
Eu tenho esse código. Infelizmente, o erro vem em admin.py com oManyToManyField
class PurchaseOrderAdmin(admin.ModelAdmin):
fields = ['product', 'dollar_amount']
list_display = ('product', 'vendor')
O erro diz:
'PurchaseOrderAdmin.list_display [0]', 'product' é um ManyToManyField que não é compatível.
No entanto, ele compila quando eu tomar 'product'
fora do list_display
. Então, como posso exibir 'product'
no list_display
sem dar-lhe erros?
editar : Talvez a melhor pergunta seja como você exibe um ManyToManyField
em list_display
?
fonte
get_queryset()
método otimizado para seuModelAdmin
, consulte stackoverflow.com/questions/12354099/…cached_property
ajude. Mas acho que provavelmente não. Quando você usa um otimizadoget_queryset
, você pode, por exemplo, anotar / pré-processar os dados lá, como fazer a concatenação de produtos em SQL em vez de em Django, e armazenar seus dados personalizados em seu queryset. Então, você só precisaria executar essa lógica uma vez no SQL e não para cada linha quando a propriedade for acessada.get_queryset
tentar fazer o meu próprio otimizado , só não consegui ler os documentos completos (nem encontrei um exemplo simples o suficiente do que deveria estar fazendo)Dessa forma, você pode fazer isso, por favor, verifique o seguinte snippet:
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)
E em seu método de chamada do módulo admin.py da seguinte maneira:
class categories(admin.ModelAdmin): list_display = ('title', 'get_parents', 'when')
fonte