Django:每个其他2个模型实例的可能组合的模型实例

时间:2018-08-18 16:38:05

标签: python django database model

我有一个带有外键的用户模型,该外键指示用户属于哪个组。用户可以订购服务。服务的价格取决于它是哪种服务以及用户所属的组。服务和组的数量可以更改,但是在任何时候,我都需要为每种可能的服务组组合定价。

class User(models.Model):
    name = models.CharField()
    group = models.Foreignkey(Group)

class Group(models.Model):
    group_name = models.CharField()

class Order(models.Model):
    user = models.Foreignkey(User)
    type = models.Foreignkey(Service)

class Service(models.Model):
    type = models.CharField()

似乎我不能简单地在“服务”模型中添加价格字段,因为同一服务的价格与组的价格一样多。

问题1:我应该以哪种模型存储价格? 我在想以下几点:

class Price(models.Model):
    service = models.Foreignkey(Service)
    group = models.Foreignkey(Group)
    price = models.DecimalField()

这是明智的策略吗?

问题2 :只有管理员才能创建新的组或服务,但是当发生这种情况时,我需要确保在Django的管理界面中以某种方式创建(例如)新服务时,该表单也询问每个组的价格不同,反之亦然,如果创建了一个新组,则表单还应询问所有服务的价格。最重要的是,最好确保每个唯一的服务组组合只有一个Price实例。

1 个答案:

答案 0 :(得分:0)

对于问题2,我需要设置新组(或服务)表格中的价格。您可以使用必填下拉字段,该字段中填充有价格查询。组形式的草图可以说明这一点:

class groupForm(forms.ModelForm):
    price = forms.ModelChoiceField(queryset=None, empty_label=None, required=True)
    ...
     def __init__(self, *args, **kwargs):
        super(groupForm, self).__init__(*args, **kwargs)
        self.fields['price'].queryset = self.instance.price_set.all()