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

2024-06-25 23:24:05 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个用户模型,其中Foreignkey指示用户属于哪个组。用户可以订购服务。服务的价格取决于它是哪个服务以及用户属于哪个组。服务和组的数量可以更改,但在任何时候我都需要每个可能的服务组组合的价格。你知道吗

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()

似乎我不能简单地在服务模型中添加一个price字段,因为同一个服务的价格和组的价格一样多。你知道吗

问题1:我应该将价格存储在哪种型号中? 我想到了以下几点:

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

这是明智的策略吗?你知道吗

问题2:只有管理员会创建一个新的组或服务,但当这种情况发生时,我需要确保在Django的管理界面中,例如创建一个新服务时,表单还要求每个组有不同的价格,反之亦然。如果创建了新组,则表单还应要求所有服务的价格。除此之外,最好确保每个唯一的服务组组合只能有一个Price实例。你知道吗


Tags: 用户name模型modelmodelstypeservicegroup
1条回答
网友
1楼 · 发布于 2024-06-25 23:24:05

对于问题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()

相关问题 更多 >