如何在Django中将类型硬编码到我的模型中

时间:2012-07-17 20:08:12

标签: database django django-models relational-database foreign-key-relationship

以下是模型的逻辑:

  1. 类别。有几个类别;每个类别可以包含多个产品。
  2. 产品。有几种产品;每个产品只能有一个类别。
  3. 是否可以指定每个产品在模型文件中的类别?例如:我可以设置模型,以便shirt只能是clothing而不是其他吗?

    这是我到目前为止(它没有验证):

    class Category(models.Model):
       CATEGORY_CHOICES = (
            ('CLOTHING', 'Clothing'),
            ('FURNITURE', 'Furniture'),
       )
       category = models.CharField(choices=CATEGORY_CHOICES)
    
    
    class Shirt(Product):
        category = models.ForeignKey(Category, default=CATEGORY_CHOICES.CLOTHING)
    
        class Table(Product):
           category = models.ForeignKey(Category, default=CATEGORY_CHOICES.FURNITURE)
    

    我是新来的。谢谢你的帮助!

3 个答案:

答案 0 :(得分:1)

您可以使用任意规则验证模型。因此,写一个验证规则,检查所有衬衫是否保存在类别服装中。

对于用户输入,请创建仅提供与产品对应的选项的表单。

祝你好运!

答案 1 :(得分:1)

我建议您花一些时间来采用最近添加的model validation,而不是自动作为表单验证(您必须自己调用clean*方法,可能在save内部) ,您将获得可在模型和表单级别使用的DRY验证。

答案 2 :(得分:0)

您可以使用callables将实例作为默认值

像这样(未经测试的代码):

class Shirt(Product):

  def getClothingInstance():
    return Category.objects.get(category=Category.CATEGORY_CHOISES['CLOTHING'])

  category = models.ForeignKey(Category, default=getClothingInstance)