django 1.8的动态表名和动态字段

时间:2015-05-02 05:02:46

标签: python django

我的要求是:根据所选商店创建类别和产品表。

class Category(models.Model):
  parent = models.ForeignKey("Category", blank=True, null=True, 
      related_name="children", verbose_name=_("Parent Category"))
  name = models.CharField(verbose_name=_("Name"), max_length=255)
  path = models.CharField(verbose_name=_("Path"), max_length=200)
  description = models.TextField(verbose_name=_("Description"))

class CategoryStore(model.Model):
  default = models.ForeignKey("Category", related_name="store_category", 
      verbose_name=_("Default Value"))
  parent = models.ForeignKey("CategoryStore", blank=True, null=True, 
      related_name="children", verbose_name=_("Parent Category"))
  name = models.CharField(verbose_name=_("Name"), max_length=255)
  description = models.TextField(verbose_name=_("Description"))
  store = models.ForeignKey("Store", related_name="store_category", 
      verbose_name=_("Store"))

CategoryStore模型将表名称设置为category_store_1,category_store_2等。想要在创建商店后动态创建表。如果我们在模型中添加另一个字段,则应该选择将新字段添加到所有表中。

class Product(models.Model):
  name = models.CharField(verbose_name=_("Name"), max_length=255)
  description = models.TextField(verbose_name=_("Description"))

class ProductStore(model.Model):
  default = models.ForeignKey("Product", related_name="store_product", 
      verbose_name=_("Default Value"))
  name = models.CharField(verbose_name=_("Name"), max_length=255)
  description = models.TextField(verbose_name=_("Description"))
  store = models.ForeignKey("Store", related_name="store_product", 
      verbose_name=_("Store"))

这也与该类别具有相同的要求。另外一个选项是,从管理表单中动态创建模型,新字段的新字段。它将是产品的属性。而不是另一个存储属性值的表,希望动态地向Product和ProductStore模型添加新字段。

1 个答案:

答案 0 :(得分:1)

不确定我是否完全理解您的问题,但在我看来您应该重新考虑您的数据库结构。我不是很有经验但是在运行中定期向db添加表格并不好。

  

CategoryStore模型的表名称为category_store_1,category_store_2等。

请记住,在django 1 model< => 1 db table ,尝试这种方法:一个名为exec()的表,其中包含来自所有商店的数据,另一个名为CategoryStore的表具有以下结构:

CategoryStore包含您需要的所有字段以及CategoryStoreType字段,该字段是type的外键。 CategoryStoreType包含每种商店类型的简短描述,例如元组CategoryStoreType。这样,当您需要一个商店类型的新字段时,您只需将另一个字段添加到('id', 'type name'),其中包含所有商店类型的数据。 (同样,对于表格,动态添加字段并不是那么好,imho。)