这是我的模型(相关部分):
class Country(models.Model):
name = models.CharField(max_length=500, choices=COUNTRY_NAME_CHOICE)
country_id = models.CharField(max_length=500,choices=COUNTRY_ID_CHOICE,primary_key=True,unique=True)
def __str__(self):
return self.name
class City(models.Model):
name = models.CharField(max_length=500,choices=CITY_NAME_CHOICE)
country = models.ForeignKey('Country',on_delete=models.CASCADE)
zip= models.CharField(max_length=500, choices=ZIP_CHOICE, primary_key=True,unique=True)
def __str__(self):
return self.name
class Cost(models.Model):
date = models.ForeignKey('Date' ,on_delete=models.CASCADE)
city= models.ForeignKey('City' ,on_delete=models.CASCADE)
value = models.FloatField(validators=[MinValueValidator(0)])
entry_time = models.DateTimeField(auto_now_add=True)
user = models.ForeignKey(User, on_delete=models.CASCADE)
def __str__(self):
return self.city.name + ' ' +str(self.value)
对于模型Cost,我在模板中列出了Django表单CostForm,以便用户可以插入新成本。
class CostForm(ModelForm):
class Meta:
model = Cost
exclude = ['user','entry_time']
#Makes only FR, NO, and RU cities available
def __init__(self, *args, **kwargs):
super(CostForm, self).__init__(*args, **kwargs)
self.fields['city'].queryset = City.objects.filter(country__name__in=['France','Norway','Russia'])
在模板城市字段上显示为下拉列表。我已经设法在上面的表格中将该字段限制为我想要的值(用户只能输入俄罗斯,挪威和法国的费用,因为他们的城市是他们在下拉菜单中看到的唯一选项)。
这是我的问题:我需要为 用户在城市下拉列表中。真正不存在的城市 数据库。让我们称之为“ X”。当用户选择城市X时,它将是 表示我需要在后端做一些额外的计算,并且 在其他一些城市之间分配费用。
我以为我可以手动将此城市X添加到CostForm的查询集中,但是经过一番深入研究后,我遇到了麻烦。每个人都说queryset对象不是要编辑的,而仅表示查询的结果。
然后,我尝试在javascript中编辑下拉列表,并在此处为city X添加新选项,但我设法(但是)无法使用该条目与city X,因为该表格无效。因此,用户仅会收到类似于“请为该字段选择有效选项”的消息。
因此,现在我回到探讨将这个城市X手动添加到CostForm中的查询集的可能性中。有人知道吗?另外,如果您对如何解决此问题还有其他想法,请分享。