Добавление вручную записи в набор запросов Django - PullRequest
0 голосов
/ 08 ноября 2018

Это моя модель (соответствующая часть):

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 у меня есть форма CostForm 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 к набору запросов в CostForm, но после некоторых обширных исследований я попал в стену. Все говорят, что объект queryset не предназначен для редактирования, а только представляет результат запроса.
Затем я попытался отредактировать выпадающий список в javascript и добавить туда новую опцию для города X, и мне удалось, НО, я не могу работать с этой записью с городом X, потому что форма недействительна. Таким образом, пользователь просто получает сообщение, подобное «Пожалуйста, выберите верный вариант для поля».
Итак, теперь я вернулся к изучению возможности добавления этого города X вручную в набор запросов в CostForm ... Кто-нибудь знает, как ?? Кроме того, если у вас есть какие-либо другие идеи о том, как я могу решить эту проблему, пожалуйста, поделитесь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...