Django 使模式在创建时继承多个外键

Django 使模式在创建时继承多个外键,django,django-models,Django,Django Models,我有两种型号,分别命名为:PaymentMode和存储为: 支付模式模式:(由django自动生成id) 门店型号:(由django自动生成id) 所以我想要的是,每当创建一个存储时,所有支付模式都会自动继承,继承所有外键,这将使存储表中的多行如下:(如果添加了id为1的存储,则3行代表1,其他类似) 我研究了各种stackoverflow问题,可能这是重复的,但这些所有重写都保存函数并只生成一个继承对象,如: 所以问题是,上述问题中的保存函数覆盖方法会继承所有外键吗?还是只有一个? 显然,付

我有两种型号,分别命名为:PaymentMode存储为

支付模式模式:(由django自动生成id)

门店型号:(由django自动生成id)

所以我想要的是,每当创建一个存储时,所有支付模式都会自动继承,继承所有外键,这将使存储表中的多行如下:(如果添加了id为1的存储,则3行代表1,其他类似)

我研究了各种stackoverflow问题,可能这是重复的,但这些所有重写都保存函数并只生成一个继承对象,如:



所以问题是,上述问题中的保存函数覆盖方法会继承所有外键吗?还是只有一个?
显然,付款模式将首先创建。此外,如果将来添加了付款模式,是否可以将新的付款模式自动添加到所有预先存在的商店?

可能我创建模型的方法是错误的。

您可以再定义一个模型

class AllPayemntModes(models.Model):
    modes = models.ManyToManyField(PaymentMode) 
然后将所有付款模式添加到存储模型和

class Store(models.Model):
    payment_modes = models.ForeignKey(AllPayementModes)
然后,每当添加新店时,您只需将其添加到所有付款模式中,所有商店都可以使用它。
specific\u mode=store.payment\u modes.modes.get(name=(“cashcash/debi/credit)将为您提供一个特定的模式。

因为这是多对多关系(一个商店可以有多个支付模式,一个支付模式可以附加到多个商店)。所以您应该使用manytomy字段

因此,商店模式如下:

class Store(models.Model):
      payment_modes = models.ManytoManyField(PaymentMode)
更新:

要在
存储
模型中添加所有付款模式,您可以覆盖
保存
方法

def save(self, *args, **kwargs):
    instance = super().save(*args, **kwargs)
    instance.payment_modes.add(*PaymentMode.objects.all())
    return instance
现在要在商店中保存付款模式,您可以询问用户给定商店的可用付款模式,或者如果您知道所有付款模式都将受支持,然后在保存商店时获取所有付款模式并将其分配给商店


上述方法有一个缺点,即如果添加了任何新的支付模式,则必须运行脚本以添加到以前的所有商店。

我是否可以直接使用商店本身的多对多作为支付模式=model.manytomy(PaymentMode)?@Aashish Gahlawat您可以,问题是,无论何时创建商店,您都需要将所有这些方法添加到该字段中;无论何时创建新的付款方法,您都需要返回并将其添加到所有商店中。我如何获取所有付款模式并进行分配?这就是我需要帮助的地方,我是否需要通过Overriding save函数和save来完成多次?感谢@Ritesh AgarwalI的尝试,在很多对很多情况下,我有重复问题,通过管理部分,商店可以多次添加sampe,我还希望每个商店的关系都是唯一的only@AashishGahlawat如果您使用
add
方法保存m2m关系,则第二次添加不会创建重复的r兴高采烈。
class Store(models.Model):
    payment_modes = models.ForeignKey(AllPayementModes)
class Store(models.Model):
      payment_modes = models.ManytoManyField(PaymentMode)
def save(self, *args, **kwargs):
    instance = super().save(*args, **kwargs)
    instance.payment_modes.add(*PaymentMode.objects.all())
    return instance