Database 如何在Django中将类型硬编码到模型中
以下是模型的逻辑:Database 如何在Django中将类型硬编码到模型中,database,django,django-models,relational-database,foreign-key-relationship,Database,Django,Django Models,Relational Database,Foreign Key Relationship,以下是模型的逻辑: 类别。有几类,;每个类别可以包含多个产品 产品。有几种产品;每个产品只能有一个类别 是否可以在模型文件中指定每个产品的类别?例如:我是否可以设置模型,使衬衫只能是衣服而不能是其他 以下是我到目前为止得到的信息(它无法验证): 这方面我是新手。谢谢你的帮助 您可以使用任意规则在保存时验证模型。因此,编写一个验证规则,检查所有衬衫是否保存在类别“衣服”中 对于用户输入,创建一个仅提供与产品对应的选项的表单 祝你好运 您可以使用callables将instance作为默认值提供 类
衬衫
只能是衣服
而不能是其他
以下是我到目前为止得到的信息(它无法验证):
这方面我是新手。谢谢你的帮助 您可以使用任意规则在保存时验证模型。因此,编写一个验证规则,检查所有衬衫是否保存在类别“衣服”中 对于用户输入,创建一个仅提供与产品对应的选项的表单
祝你好运 您可以使用callables将instance作为默认值提供 类似于以下内容(未经测试的代码):
我建议您花一些时间来采用最近添加的,但它不是自动的表单验证(您必须自己调用
clean*
方法,可能在save
中),您将获得可用于模型和表单级别的干式验证。此级别的验证应在代码中完成。我同意@Sid的观点,硬编码这种东西将克服复杂性,并且不是非常流畅的设计,这属于模型,可能是表单验证感谢您的输入!快速澄清问题:那么有必要开一个分类课吗?或者我可以定义一个方法,比如def category(self)来指定特定模型的类别吗?如果要验证允许的产品类别,似乎需要在某个地方定义它们。如果我这样做,我会创建一个方法,返回给定产品允许的类别,并用它填充显示表单中的选择字段。我可能也会做验证作为检查。
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)
class Shirt(Product):
def getClothingInstance():
return Category.objects.get(category=Category.CATEGORY_CHOISES['CLOTHING'])
category = models.ForeignKey(Category, default=getClothingInstance)