我必须定义一个模型,其中一个字段依赖于另一个字段。
我正在存储商品交易,商品的等级根据商品的种类而有所不同。例如,如果我存储煤炭和铁交易,我需要指定每个交易等级的数量。
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()函数中吗?
答案 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)通常:是的。我建议的示例可能需要您以不同的方式编写已经开发的验证。