Это моя модель (соответствующая часть):
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 ... Кто-нибудь знает, как ?? Кроме того, если у вас есть какие-либо другие идеи о том, как я могу решить эту проблему, пожалуйста, поделитесь.