在Django管理站点中创建分层数据库

时间:2012-03-02 05:24:27

标签: database django django-admin foreign-key-relationship

我正在处理的流程

  1. 产品表,使用类别表分类
  2. 可选项目表,分层列出产品主数据的选项。
  3. 类比 - 考虑具有 层次结构 的购物车,如下所示 -

    • 笔记本电脑& 类别表中的计算机外围设备
        产品表中的
      • 笔记本电脑
          可选项目表中的
        • HP ,可以有很多这样的选项
            可选项目表 中的
          • HP Type A Parent 可选项目表中的
          • HP Type B Parent
              可选项目表 中的
            • HP Type B Child
          • 可选项目表中的
          • HP Type C Super Parent
              可选项目表中的
            • HP Type C Parent
                可选项目表 中的
              • HP Type C Child
        • 可选项目表 中的可选项目表中的
        • 联想 可选项目表
        • 中的可选项目表中的
        • Sony
      • 产品表 中的
      • 图形卡
    • 类别表 中的
    • 手机

    我有以下

    models.py


     class Product(models.Model):
            productid = models.AutoField(primary_key=True)     
            productname = models.CharField(max_length=255, unique=True)    
            categoryid = models.ForeignKey(Categorytbl, db_column='CategoryID')       
    
    
     class Optionalitemstbl(models.Model):  
            optionid = models.AutoField(primary_key=True)     
            productid = models.ForeignKey(Product)       
            optionname = models.CharField(max_length=255, unique=True)        
            optionparentid = models.ForeignKey("self", related_name='+', blank=True, null=True)     
            def clean(self, *args, **kwargs):  
                if self.optionparentid and self.productid:  
                    if self.optionparentid.optionid == self.optionid:  
                        from django.core.exceptions import ValidationError  
                        raise ValidationError('Option cannot be an option of itself')  
                        return
                    super(Optionalitemstbl, self).save(*args, **kwargs)
    

    这使我能够像上面的类比一样创建关系。

    然而问题是,它还允许循环关系。假设用户如上所述在管理网站中进行了类推,则他也可以将 HP Type C Child 列为 HP 的父级或表中的任何其他父节点。

    请建议 -

    1. 这是提到类比的正确方法吗?
    2. 如果是,那么哪些修改会阻止这种循环关系?
    3. 谢谢!

0 个答案:

没有答案