定义依赖的Django模型字段

时间:2014-10-07 07:23:38

标签: django django-models

我必须定义一个模型,其中一个字段依赖于另一个字段。

我正在存储商品交易,商品的等级根据商品的种类而有所不同。例如,如果我存储煤炭和铁交易,我需要指定每个交易等级的数量。

Example:

{'Grade–I':500, 'Grade-II':1000, 'Washery-Grade-I':0, 'Washery-Grade-II':0, 'Washery-Grade-III':100}

{'Fe 65%+':10, 'Fe 60-65%':55,'Fe 55-60%':0}

一种可能的方法是将商品类型存储为CharField,并选择并序列化等级数量并将其存储为JSONField。

 class TradeRetail (models.Model):
        commodity_type = models.CharField(max_length=5, choices=(('CO','COAL'),('IO','IRON-ORE'),('WTI','WTI'),), blank=False)
        grade_quantity = JSONField()

我的问题是:

a)这是创建模型的最佳方式吗?

b)如何定义grade_quantity和commodity_type之间的关系以生成适当的表单以获取用户输入?

c)我写的所有自定义验证都会在clean()函数中吗?

1 个答案:

答案 0 :(得分:1)

如果我能正确解决你的问题,我认为它会更符合" Django兼容"定义两个模型:一个包含commodity_type,另一个包含grade_quantity。然后,您可以在commodity_type中创建外键以将其与grade_quantity链接。 作为一般文档,您可以阅读https://docs.djangoproject.com/en/1.7/topics/db/examples/one_to_one/

例:

class Commodity (models.Model):
    type = models.CharField(...)
    quantity = models.ForeignKey('Commodity')

class Grade (models.Model):
    type = models.<your type adapted to the grade quantity field>

警告:我还没有测试过这个确切的例子,但它看起来就像你想要实现的那样。请查看页面https://docs.djangoproject.com/en/dev/ref/models/fields/#foreignkey

对于你的问题:

a)有关如何创建模型的提示,请参阅OneToOne示例的第一个链接。通常,添加 str (self)函数以正确显示模型实例的名称很有用。仔细阅读Django文档中的示例,以获得有关如何正确编写模型的提示(通常首先定义字段,然后定义模型的方法,通常是 str 方法)。

b)ForeignKey字段是两个模型(oneToOne)之间的链接。 ManyToManyField字段也存在ManyToMany链接(请参阅https://docs.djangoproject.com/en/dev/topics/db/examples/many_to_many/

c)通常:是的。我建议的示例可能需要您以不同的方式编写已经开发的验证。