这是我的模型(相关部分):
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)
对于模型成本,我有一个django表单成本表单,我将它列在模板上,这样用户就可以插入新的成本。
class CostForm(ModelForm):
class Meta:
model = Cost
exclude = ['user','entry_time']
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中,但是经过一些广泛的研究之后,我发现了问题。每个人都在说,queryset对象不在那里进行编辑,而是只表示查询的结果。
然后我尝试用javascript编辑下拉列表,并在那里为city x添加了一个新选项,我成功地做到了,但是,我不能用city x处理这个条目,因为表单无效。因此,用户只会收到类似于“请为字段选择有效选项”的消息。
所以现在我又回到探索将这个city x手动添加到costform中的queryset的可能性……有人知道怎么做吗??另外,如果您对我如何解决这个问题有任何其他想法,请与我们分享。