многие ко многим в списке Джанго
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
у меня есть этот код. К сожалению, ошибка приходит admin.py с помощью ManyToManyField
class PurchaseOrderAdmin(admin.ModelAdmin):
fields = ['product', 'dollar_amount']
list_display = ('product', 'vendor')
ошибка говорит:
' PurchaseOrderAdmin.list_display[0]', 'product' - это ManyToManyField
который не поддерживается.
однако он компилируется, когда я беру 'product' из list_display. Так как я могу отобразить 'product' на list_display не давая ему ошибки?
edit: может быть, лучше спросить будьте как вы показываете ManyToManyField на list_display?
2 ответов:
вы не сможете сделать это напрямую. из документации
list_displayManyToManyField поля не поддерживаются, потому что это повлечет за собой выполнение отдельных SQL-запрос для каждой строки в таблице. Если вы хотите сделать это, тем не менее, дайте вашей модели пользовательский метод и добавьте имя этого метода в list_display. (См. ниже Для больше на заказ методы в list_display.)
вы можете сделать что-то подобное это:
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()])или определить метод модели, и использовать
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()])и в admin
list_displaylist_display = ('get_products', 'vendor')
таким образом, вы можете сделать это, пожалуйста, проверьте следующий фрагмент:
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)и в вашем admin.py модуль вызова метода следующим образом:
class categories(admin.ModelAdmin): list_display = ('title', 'get_parents', 'when')
Comments