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
Mam ten kod. Niestety błąd pojawia się w admin.py z rozszerzeniemManyToManyField
class PurchaseOrderAdmin(admin.ModelAdmin):
fields = ['product', 'dollar_amount']
list_display = ('product', 'vendor')
Błąd mówi:
„PurchaseOrderAdmin.list_display [0]”, „produkt” to ManyToManyField, który nie jest obsługiwany.
Jednak kiedy kompiluje się 'product'
z list_display
. Jak więc mogę wyświetlić 'product'
w programie list_display
bez podawania błędów?
edycja : Może lepszym pytaniem byłoby, jak wyświetlić ManyToManyField
w list_display
?
źródło
get_queryset()
metodę dla swojejModelAdmin
, patrz stackoverflow.com/questions/12354099/ ...cached_property
pomogłoby. Ale myślę, że prawdopodobnie nie. Kiedy używasz zoptymalizowanegoget_queryset
, możesz na przykład dodać adnotacje / wstępnie przetworzyć dane tam, na przykład wykonując konkatenację produktów w SQL zamiast w Django, i przechowywać niestandardowe dane w swoim zestawie zapytań. Wtedy wystarczyłoby wykonać tę logikę tylko raz w SQL, a nie dla każdego wiersza, gdy uzyskiwany jest dostęp do właściwości.get_queryset
, po prostu nie przeczytałem pełnej dokumentacji (ani nie znalazłem wystarczająco prostego przykładu tego, co powinienem robić)W ten sposób możesz to zrobić, uprzejmie sprawdź następujący fragment:
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)
A w metodzie wywołania modułu admin.py w następujący sposób:
class categories(admin.ModelAdmin): list_display = ('title', 'get_parents', 'when')
źródło