如何在Django Admin中显示产品尺寸的变化

时间:2020-05-07 00:10:27

标签: django

我终于为订单商品添加了变体,所以现在我添加了大小分别为S,M和L的商品

将变体添加到要显示的管理员后,它会以

返回
ERRORS:
<class 'core.admin.OrderItemAdmin'>: (admin.E109) The value of 'list_display[3]' must not be a ManyToManyField.

所以我如何在管理员中显示大小变化:

这是模型:

class VariationManager(models.Manager):
    def all(self):
        return super(VariationManager, self).filter(active=True)

    def sizes(self):
        return self.all().filter(category='size')

    def colors(self):
        return self.all().filter(category='color')


VAR_CATEGORIES = (
    ('size', 'size',),
    ('color', 'color',),
    ('package', 'package'),
)


class Variation(models.Model):
    item = models.ForeignKey(Item, on_delete=models.CASCADE)
    category = models.CharField(
        max_length=120, choices=VAR_CATEGORIES, default='size')
    title = models.CharField(max_length=120)
    image = models.ImageField(null=True, blank=True)
    price = models.FloatField(null=True, blank=True)
    objects = VariationManager()
    updated = models.DateTimeField(auto_now_add=False, auto_now=True)
    active = models.BooleanField(default=True)

    def __str__(self):
        return self.title

class OrderItem(models.Model):
    user = models.ForeignKey(settings.AUTH_USER_MODEL,
                             on_delete=models.CASCADE)
    ordered = models.BooleanField(default=False)
    item = models.ForeignKey(Item, on_delete=models.CASCADE)
    quantity = models.IntegerField(default=1)
    variation = models.ManyToManyField(Variation)

    def __str__(self):
        return f"{self.quantity} of {self.item.title}"

这是admin.py

class OrderAdmin(admin.ModelAdmin):
    list_display = ['user', 'ordered', 'ordered_date', 'coupon', 'payment', 'shipping_address', 'billing_address', 'out_for_delivery',
                    'received', 'refund_requested', 'refund_granted', 'ref_code']
    list_display_links = [
        'user',
        'shipping_address',
        'billing_address',
        'payment',
        'coupon'
    ]

class OrderItemAdmin(admin.ModelAdmin):
    list_display = ['item', 'quantity', 'ordered', ]

0 个答案:

没有答案