类别的DjangoEAV实现

2024-06-15 18:18:19 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在为我的在线商店使用https://github.com/DanielIndictor/django-eav2eav存储库

面对一个问题,我不知道如何根据类别将属性传递给产品。在“管理”面板中选择类别时,产品应具有该类别的属性。找到了这样的数据组织方案,但我不知道如何使用此库实现它

EAV数据库模式

EAV database schema

models.py

from django.db import models
import eav


class Category(models.Model):
    name = models.CharField(max_length=40, verbose_name='Название')

    def __str__(self):
        return str(self.name)

    class Meta:
        verbose_name = 'Категория'
        verbose_name_plural = 'Категории'


class Product(models.Model):
    name = models.CharField(max_length=40, verbose_name='Название')
    category = models.ForeignKey(Category, on_delete=models.PROTECT)

    def __str__(self):
        return str(self.name)

    class Meta:
        verbose_name = 'Товар'
        verbose_name_plural = 'Товары'


eav.register(Category)
eav.register(Product)

admin.py

from django.contrib import admin
from eav.forms import BaseDynamicEntityForm
from eav.admin import BaseEntityAdmin
from .models import Product, Category


# Register your models here.


class CategoryAdminForm(BaseDynamicEntityForm):
    model = Category


class CategoryAdmin(BaseEntityAdmin):
    form = CategoryAdminForm


admin.site.register(Category, CategoryAdmin)
admin.site.register(Product)

Tags: djangonamefromimportselfregisterverboseadmin