Django 中的类别、子类别和产品
Categories, Subcategories and products in Django
所以,我遇到了以下问题:
我正在尝试使用 products
、subcategories
和 categories
创建网络应用程序。
所有这些都应该是连接的,意思是:一个产品可以连接或关联到一个类别、子类别;一个子类别可以连接到一个或多个类别等等。
所有这些都可以由管理员在 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
所以,我遇到了以下问题:
我正在尝试使用 products
、subcategories
和 categories
创建网络应用程序。
所有这些都应该是连接的,意思是:一个产品可以连接或关联到一个类别、子类别;一个子类别可以连接到一个或多个类别等等。
所有这些都可以由管理员在 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