django - make 模式在创建时继承多个外键
问题描述
我有 2 个模型命名:PaymentMode和Store as:
PaymentMode 模型:(id 将由 django 自动生成)
id = model.IntegerField(primarykey)
name = model.CharField("eg: cash, debit, credit")
商店模型:(id 将由 django 自动生成)
id = model.IntegerField(primarykey)
payment_mode = model.ForeignKey(Paymentmode, on_delete=model.cascade)
mode_credit_value = model.IntegerField(default=0)
name = model.CharField()
... some other fields
所以我想要的是每当创建商店时,所有支付模式都会自动继承,继承所有外键,这将在商店表中创建多行:(如果添加了 id 为 1 的商店,1 为 3 行,其他类似)
store_id | payment_mode | name
------------------------------
1 1 abcd
1 2 abcd
1 3 abcd
... similarly if store id 2 is passed, all master are inherited
2 1 xyz
2 2 xyz
2 3 xyz
我查看了各种stackoverflow问题,可能这可能是重复的,但是所有这些都覆盖了保存功能并只制作一个继承的对象,例如:
Stackoverflow问题
所以问题是上述问题中的保存函数覆盖方法会继承所有外键吗?还是只会做一个?
显然,支付模式将首先被创建。另外,将来如果添加付款方式,是否可以自动为所有现有商店添加新的付款方式?
可能我创建模型的方法是错误的。
解决方案
由于这是多对多的关系(一个商店可以有多种支付方式,一种支付方式可以附加到多个商店)。所以你应该使用 ManyToMany 字段。
所以商店模型将是:
class Store(models.Model):
payment_modes = models.ManytoManyField(PaymentMode)
更新:
要在模型中添加所有支付方式Store
,您可以覆盖该save
方法。
def save(self, *args, **kwargs):
instance = super().save(*args, **kwargs)
instance.payment_modes.add(*PaymentMode.objects.all())
return instance
现在要将支付模式保存在商店中,您可以询问用户给定商店的可用支付模式是什么,或者如果您知道所有支付模式都将受支持,那么在保存商店时获取所有支付模式并分配它来存储。
上述方法有一个缺点,如果添加了任何新的支付模式,那么您必须运行一个脚本来添加到所有以前的商店。
推荐阅读
- javascript - Unable to get user's top artists and tracks with Spotify API
- python - Python Linkedin API Error
- entity-framework-core - 在 asp.net core 中更新的最佳方法是什么
- git - 如何从 PhpStorm 推送到 Bitbucket?
- html - How to add background-color on background-image?
- php - Laravel belongsTo 关系不返回值
- javascript - 在有和没有大小写的情况下计算数组中的相似词
- android - Calculating height when there is embedded tweet Android
- selenium - How to run groovy based JUnit Test Suite from the command line?
- azure - 从映像创建映像时“配置 VM 失败。需要计划信息”