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
그것을 오류를 부여하지 않고?
편집 : 아마도 더 나은 질문은 당신이 표시 어떻게 될 것 ManyToManyField
으로 list_display
?
답변
직접 할 수 없을 수도 있습니다. 문서에서list_display
ManyToManyField 필드는 테이블의 각 행에 대해 별도의 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()])
그리고 관리자 list_display
list_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')