Вопрос:

Как создать пользовательскую форму Django с выбранными полями из разных моделей?

python django forms

965 просмотра

1 ответ

83 Репутация автора

Как сделать форму в Django, используя 3 разные модели в качестве поля для формы?

Это мои модели:

class User(models.Model):
    first_name = models.CharField(max_length=20)
    last_name = models.CharField(max_length=50)
    city = models.CharField(max_length=50)

class Team(models.Model):
    team_name = models.CharField(max_length=250)
    city = models.CharField(max_length=50)

class GameCategories(models.Model):
    CATEGORIES = (
        ('Senior', 'Senior'),
        ('Middle', 'Middle'),
        ('Junior', 'Junior'),
    )

    category = models.CharField(max_length=16, choices=CATEGORIES)

Я хочу создать форму, используя <select><option></option></select>приведенные выше модели, которые будут выглядеть следующим образом:

<select class="form-control">
    <option value=""></option>
    <option value="user.id">user.first_name + user.last_name</option>
    <option value="user.id">user.first_name + user.last_name</option>
    <option value="user.id">user.first_name + user.last_name</option>
</select>
<select class="form-control">
    <option value=""></option>
    <option value="gamecat.id">gamecat.category</option>
    <option value="gamecat.id">gamecat.category</option>
    <option value="gamecat.id">gamecat.category</option>
</select>
<select class="form-control">
    <option value=""></option>
    <option value="team.id">team.team_name</option>
    <option value="team.id">team.team_name</option>
    <option value="team.id">team.team_name</option>
</select>

и после заполнения формы, когда пользователь нажимает кнопку «Отправить», я хочу отправить в другое представление все значения (идентификатор пользователя, идентификатор категории игры, идентификатор команды).

На самом деле я понятия не имею, как это сделать. Я думаю, что я должен создать ModelForm.

Не могли бы вы мне помочь?

Автор: fafal Источник Размещён: 07.01.2018 06:32

Ответы (1)


3 плюса

4075 Репутация автора

Используйте django формы ModelChoiceField

from django import forms

from .models import GameCategories, User, Team

class CustomForm(forms.Form):
    '''Form with User, Team and GameCategories'''
    user = forms.ModelChoiceField(queryset=User.objects.all())
    team = forms.ModelChoiceField(queryset=Team.objects.all())
    game_category = forms.ModelChoiceField(
        queryset=GameCategories.objects.all()
    )

Помните, что если вы хотите, чтобы выбор сохранялся для конкретного пользователя, вы должны использовать ModelFormвместо него. Если вы просто храните его для следующего запроса или в файлах cookie, то это решение будет работать.

Следует также отметить, что __str__()метод используется в качестве метки опции.

Автор: surfer190 Размещён: 07.01.2018 07:06
Вопросы из категории :
32x32