Набор форм модели Django ModelChoiceField, создающий форму для каждого объекта

Я пытаюсь настроить набор форм модели с помощью ModelChoiceField, чтобы пользователь мог создавать несколько форм, и в каждой форме они выбирают один элемент из набора запросов. Однако, когда я отображаю свой набор форм, он создает форму для каждого объекта в наборе запросов. В каждой форме ModelChoiceField уже установлен на следующий объект в наборе запросов. Это нежелательно, мне нужна только одна форма, в которой пользователь должен выбрать нужный объект, и я создам их динамически с помощью JS. В основном я вставляю набор форм приложений в форму запроса правил.

Формы:

class ApplicationForm(BootstrapMixin, forms.ModelForm):

    name = forms.ModelChoiceField(
        queryset=Application.objects.all(),
        to_field_name='name',
        help_text='Application name',
        error_messages={
            'invalid_choice': 'Application not found.',
        }
    )

    class Meta:
        model = Application
        fields = [
            'name'
        ]
        help_texts = {
            'name': "Application name",
        }


class RuleRequestForm(BootstrapMixin, forms.ModelForm):

    class Meta:
        model = RuleRequest
        fields = [
            'name', 'description', 
        ]
        help_texts = {
            'name': 'Short name for the request',
            'description': "Buisness case and summary.",
        }

    def __init__(self, *args, **kwargs):

        super(RuleRequestForm, self).__init__(*args, **kwargs)

        data = kwargs.get('data')
        initial = kwargs.get('initial')

        application_formset = modelformset_factory(Application, form=ApplicationForm, extra=0, min_num=1)

        self.applications = application_formset(data=data, initial=initial, prefix='applications')

Модели:

class Application(CreatedUpdatedModel):

    name = models.CharField(
        max_length=255,
        null=True
    )
    description = models.TextField(
        blank=True
    )

    def __str__(self):
        return self.name


class RuleRequest(CreatedUpdatedModel, ST2ExecuationModel):

    name = models.CharField(
        max_length=255
    )
    description = models.TextField(
        blank=False
    )
    applications = models.ManyToManyField(
        to=Application,
        related_name='rule_requests'
    )

person lampwins    schedule 28.08.2017    source источник
comment
так работает набор форм. Вам нужно будет создать желаемый функционал.   -  person alfonso.kim    schedule 28.08.2017
comment
@alfonso.kim как мне это сделать? Я хочу инициализировать только одну форму, и ModelChoiceField ничего не должно быть выбрано.   -  person lampwins    schedule 28.08.2017
comment
Пожалуйста, напишите код вашей модели.   -  person alfonso.kim    schedule 28.08.2017
comment
@ alfonso.kim хорошо, я обновил вопрос с моделями.   -  person lampwins    schedule 28.08.2017


Ответы (1)


вы можете начать с простого подхода:

на ваш взгляд:

applications = Application.objects.all()
return render('template_name.html', request, applications)

в вашем шаблоне:

<select id="application-select">
{% for application in applications %}
   <option value="{{ application.name }}">{{ application.description }}</option>
{% endfor %}

<!-- in your javascript -->
$('#application-select').on('change', function (e) {
    var optionSelected = $("option:selected", this);
    var valueSelected = this.value;
    // do something with the selected option
});

После того, как вы определили поведение для форм, вы можете использовать ModelForm Django для сокращения кода.

обратите внимание, что это не полное решение вашей проблемы. Это зависит от того, как вы хотите создавать формы.

person alfonso.kim    schedule 28.08.2017