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
Saya memiliki kode itu. Sayangnya, kesalahan muncul di admin.py denganManyToManyField
class PurchaseOrderAdmin(admin.ModelAdmin):
fields = ['product', 'dollar_amount']
list_display = ('product', 'vendor')
Kesalahannya mengatakan:
'PurchaseOrderAdmin.list_display [0]', 'product' adalah ManyToManyField yang tidak didukung.
Namun, itu dikompilasi saat saya 'product'
mengeluarkan list_display
. Jadi bagaimana saya bisa menampilkan 'product'
di list_display
tanpa memberikan kesalahan?
edit : Mungkin pertanyaan yang lebih baik adalah bagaimana Anda menampilkan ManyToManyField
in list_display
?
sumber
get_queryset()
metode yang dioptimalkan untuk AndaModelAdmin
, lihat stackoverflow.com/questions/12354099/…cached_property
bisa membantu. Tapi saya pikir mungkin tidak. Ketika Anda menggunakan yang dioptimalkanget_queryset
, Anda dapat misalnya membuat anotasi / pra-proses data di sana, seperti melakukan penggabungan produk dalam SQL daripada di Django, dan menyimpan data khusus Anda di queryset Anda. Maka Anda hanya perlu menjalankan logika itu sekali dalam SQL dan tidak untuk setiap baris saat properti diakses.get_queryset
, saya hanya belum sempat membaca dokumen lengkapnya (atau menemukan contoh yang cukup sederhana tentang apa yang seharusnya saya lakukan)Dengan cara ini Anda dapat melakukannya, silakan periksa cuplikan berikut:
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)
Dan dalam metode pemanggilan modul admin.py Anda sebagai berikut:
class categories(admin.ModelAdmin): list_display = ('title', 'get_parents', 'when')
sumber