что возвращает автозаполнение?

Недавно я установил автозаполнение в своем приложении.

Автозаполнение фильтрует поле под названием «имя» в таблице под названием «Учреждение». Однако то, что публикуется через представление, является «идентификатором» того же объекта, а не именем.

Кто-нибудь знает, почему это так?

Моя точка зрения такова:

class UserAccountsUpdate(UpdateView):
    context_object_name = 'variable_used_in `add_user_accounts.html`'
    form_class = AddUserAccountsForm
    template_name = 'add_user_accounts.html'
    success_url = 'add_user_accounts.html'

    def add_user_institution_details(request):
        if request.method == 'POST':
            # create a form instance and populate it with data from the request:
            form = AddUserAccountsForm(request.POST)
            # check whether it's valid:
            if form.is_valid():
                institution_selected = Institution.objects.get(id=name)
                form.save()

        return render(request)

    #get object
    def get_object(self, queryset=None): 
        return self.request.user

Форма:

class AddUserAccountsForm(forms.ModelForm):

    name = forms.ModelChoiceField(required=True, queryset=Institution.objects.all(), widget=autocomplete_light.ChoiceWidget('InstitutionAutocomplete'), label="")

    class Meta:
        model = Institution
        fields = ('name',)

person H C    schedule 24.11.2015    source источник


Ответы (1)


autocomplete-light ChoiceWidget по умолчанию использует PrimaryKey модели для почтовых запросов, что в вашем случае id.

Поскольку вы не опубликовали свой models.py, я могу только предположить, что name является CharField в модели Institution, и вы просто используете здесь автозаполнение, чтобы упростить добавление имени.

Для этого используйте TextWidget и forms.CharField :

class AddUserAccountsForm(forms.ModelForm):

    name = forms.CharField(
        required=True,
        widget=autocomplete_light.TextWidget('InstitutionAutocomplete'),
        label="",
    )

    class Meta:
        model = Institution
        fields = ('name',)
person Leistungsabfall    schedule 24.11.2015
comment
Я понимаю. Спасибо большое! это работает. Часть того же кода. Знаете ли вы, почемуstitution_selected = Institution.objects.get(name=name) не дает никаких результатов? Запись должна быть в таблице, потому что автозаполнение ее нашло. - person H C; 24.11.2015
comment
name происходит от request.POST или от form? Также вы получите желаемый результат, если добавите print(name) в свой код? (обратите внимание на пробелы) - person Leistungsabfall; 24.11.2015
comment
Во-первых, спасибо за помощь. Я реализовал функцию просмотра в формате класса, что очень усложняет отладку. Мой оператор печати не отображается. (Есть ли лучший способ отладки в формате класса?) Я предполагаю, что имя происходит, когда пользователь выбирает имя из автозаполнения. - person H C; 24.11.2015
comment
Есть ли выход, когда вы ставите print('name: ' + form.cleaned_data['name']) после вызова form.is_valid()? - person Leistungsabfall; 24.11.2015
comment
Печать не отображается в моем терминале. Вот почему мне так трудно отлаживать эту ошибку. Если вы можете предложить, где я могу увидеть результат, это было бы здорово. Однако, как было предложено в другом месте в Stack Overflow, я установил панель инструментов отладки Django. Когда я смотрю на результаты POST, я получаю правильное «имя» учреждения, которое я выбрал из автозаполнения. - person H C; 25.11.2015
comment
Будет ли работать, если вы переименуете метод add_user_institution_details в post? Если это не так, вам следует подумать о том, чтобы задать новый вопрос и включить конфигурацию URL-адреса, форму, представление и модель. - person Leistungsabfall; 25.11.2015
comment
Спасибо, я разместил здесь отдельный вопрос. Если вы можете помочь, это было бы здорово! stackoverflow.com/questions/33910120/ - person H C; 25.11.2015