代码之家  ›  专栏  ›  技术社区  ›  GileBrt user3470395

手动向django queryset添加条目

  •  0
  • GileBrt user3470395  · 技术社区  · 6 年前

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

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

    0 回复  |  直到 6 年前