我有一个带有外键的用户模型,该外键指示用户属于哪个组。用户可以订购服务。服务的价格取决于它是哪种服务以及用户所属的组。服务和组的数量可以更改,但是在任何时候,我都需要为每种可能的服务组组合定价。
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实例。
答案 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()