Django 中的类别、子类别和产品

Categories, Subcategories and products in Django

所以,我遇到了以下问题:

我正在尝试使用 productssubcategoriescategories 创建网络应用程序。
所有这些都应该是连接的,意思是:一个产品可以连接或关联到一个类别、子类别;一个子类别可以连接到一个或多个类别等等。
所有这些都可以由管理员在 Django 管理页面中进行管理。 这是我的 models.py(所有名字都是西班牙语,但它们很容易解释)

from django.db import models

# Create your models here.

class Producto(models.Model):
    nombre = models.CharField(max_length=200)


    def __str__(self):
        return self.nombre


class Subcategoria(models.Model):
    nombre = models.CharField(max_length=200)
    estado = models.BooleanField(default=True)
    producto = models.ManyToManyField(Producto) # unique=True,

    def __str__(self):
        return self.nombre


class Categoria(models.Model):
    nombre = models.CharField(max_length=200)
    estado = models.BooleanField(default=True)
    producto = models.ManyToManyField(Producto)
    subcategoria = models.ManyToManyField(Subcategoria)#, blank=True, default=None

    def __str__(self):
        return self.nombre

此代码运行良好,除了它会自动将所有现有产品添加到子类别、类别、所有子类别到类别等等。
我无法编辑或删除,这让我很困惑。 有什么想法吗?

非常感谢!

两个模型之间的多对多关系定义了第一个模型的零个、一个或多个对象可能与第二个模型的零个、一个或多个对象相关。因此,我建议您使用 ForeignKey(多对一)

因此,代码变为:

from django.db import models

class Categoria(models.Model):
    nombre = models.CharField(max_length=200)
    estado = models.BooleanField(default=True)

    def __str__(self):
        return self.nombre 

class Subcategoria(models.Model):
    nombre = models.CharField(max_length=200)
    estado = models.BooleanField(default=True)
    categoria = models.ForeignKey(Categoria,  on_delete = models.CASCADE)

    def __str__(self):
        return self.nombre


class Producto(models.Model):
    nombre = models.CharField(max_length=200)
    subcategoria = models.ForeignKey(Subcategoria,unique=True,on_delete= models.CASCADE) 
    categoria = models.ForeignKey(Categoria,blank=True,default=None, on_delete = models.CASCADE) 

    def __str__(self):
        return self.nombre

注意: ForeignKey with unique = True 有点类似于 OneToOneField