【问题标题】:Categories, Subcategories and products in DjangoDjango 中的类别、子类别和产品
【发布时间】:2019-12-20 16:16:59
【问题描述】:

所以,我有以下问题:

我正在尝试使用productssubcategoriescategories 创建一个网络应用程序。
所有这些都应该是连接的,意思是:一个产品可以连接或关联到一个类别、子类别;一个子类别可以连接到一个或多个类别等等。
所有这些都可以在 Django 管理页面中由 admin 管理。 这是我的 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

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

非常感谢!

【问题讨论】:

  • 我认为您在创建 ProductsSubcategoria 时遇到了问题。你能出示这段代码吗?
  • 我建议为每个类编写一个__repr__ 方法。或者做我一直在做的事情,让dataclass 装饰器为我创建方法。
  • @NgocPham 你的意思是像创建模型一样创建?这段代码就在那里,我什么都没有。
  • @AMC 你能告诉我一些你是怎么做的示例代码吗?谢谢!
  • 我怀疑是不是结构错了。

标签: python django model categories


【解决方案1】:

两个模型之间的多对多关系定义了第一个模型的零个、一个或多个对象可能与第二个模型的零个、一个或多个对象相关。因此,我建议您使用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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-06-04
    • 2013-05-28
    • 1970-01-01
    • 1970-01-01
    • 2018-11-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多