Как реализовать раскрывающийся список со значениями из базы данных - PullRequest
2 голосов
/ 30 сентября 2019

Я очень новичок в Python и Django, поэтому у меня возникла эта проблема. То, что я хочу сделать, это создать поведение тега HTML Select с формой Django. Этот выпадающий список должен быть заполнен значениями из базы данных.

У меня уже есть location = forms.ModelChoiceField(queryset = MyModel.objects.all()), который дает мне элемент управления select / drowpdown, но мне нужно, чтобы он отображал одно значение из базы данных и имел другое значение в качестве фактического значения (оба из одной таблицытолько разные столбцы)

То, что я имею в виду в HTML-коде, будет выглядеть так:

<select>
  <option value="1">Berlin</option>
  <option value="2">New York</option>
  <option value="3">London</option>
  <option value="4">Riga</option>
</select> 

Итак, используя форму, я вижу название города, например. Лондон, но когда он выбран, и отправить называется, я вставляю в базу данных 3.

Жду ваших предложений.

РЕДАКТИРОВАТЬ:

class Event(models.Model):
    eventid = models.AutoField(primary_key=True)
    date = models.DateField(blank=True, null=True)
    time = models.TimeField(blank=True, null=True)
    description = models.CharField(max_length=2000, blank=True, null=True)
    price = models.IntegerField(blank=True, null=True)
    locationid = models.ForeignKey(Location, models.DO_NOTHING, db_column='locationid', blank=True, null=True)

    class Meta:
        managed = False
        db_table = 'event'

class Location(models.Model):
    locationid = models.AutoField(primary_key=True)
    name = models.CharField(max_length=256, blank=True, null=True)
    capacity = models.IntegerField(blank=True, null=True)
    type = models.CharField(max_length=256, blank=True, null=True)
    cityid = models.ForeignKey(City, models.DO_NOTHING, db_column='cityid', blank=True, null=True)

    class Meta:
        managed = False
        db_table = 'location'

Итак, у меня естьссылка на идентификатор другой таблицы, из которой я хочу получить имя местоположения и заполнить выбор / выпадающий с этими именами. Когда пользователь делает выбор, он должен принимать не имя, а целое число / идентификатор. Имеет ли это смысл?

1 Ответ

0 голосов
/ 30 сентября 2019

Вы можете попробовать это

в forms.py

class your_form(forms.ModelForm):

    def __init__(self, *args, **kwargs):
        super(your_form, self).__init__(*args, **kwargs)
        self.fields['location'].label_from_instance = self.label_from_instance

    @staticmethod
    def label_from_instance(obj):
        return "Label %s" % obj.name

или из документов

from django.forms import ModelChoiceField

class MyModelChoiceField(ModelChoiceField):
    def label_from_instance(self, obj):
        return "My Object #%i" % obj.id

см. это

...