手动将条目添加到Django查询集

时间:2018-11-08 14:15:50

标签: django django-queryset

这是我的模型(相关部分):

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中的查询集的可能性中。有人知道吗?另外,如果您对如何解决此问题还有其他想法,请分享。

0 个答案:

没有答案