как показать варианты размеров товаров в Django Админ - PullRequest
0 голосов
/ 07 мая 2020

Я, наконец, добавил варианты к своим элементам заказа, поэтому теперь я добавляю элементы с разными размерами 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', ]

1 Ответ

0 голосов
/ 08 мая 2020

Из вашего комментария, я думаю, удаление variatons из list_display устранило ошибку, но вы хотите показать содержимое поля вариантов?

Я бы предложил использовать @property.

Взгляните на документацию или этот ответ

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...