Django custom forms with models, also with 'choices' as values, how should I approach this problem?

у меня очень сильно болит голова...

Я бьюсь над этим уже 2 часа

Я хотел сделать пользовательскую форму для модели, чтобы иметь возможность добавлять в нее объекты, а также перемещать поля по своему усмотрению (вместо использования form.as_p (или form|crispy), я хотел поместить всю форму в таблицу типа grid, используя пользовательский шаблон, а не только помещать одно под другое), но всякий раз, когда я помещаю поле выбора (которое является либо полем выбора, либо foreignkey), их значения пусты, а также, 3 из 4 полей формы фактически отображаются, одно остается по умолчанию.

В нем содержится fields='__all__' с 3 полями выбора и 1 плавающим полем, каждое с меткой, больше ничего.

Для отображения форм в html я использовал

{% for field in form.visible_fields %}
            {{ field.label_tag }}

                {{ field.errors }}
                {{ field }}
                {{ field.help_text }}

        {% endfor %}

, который работает хорошо. Я пытаюсь решить проблему неправильным способом? Я вернусь к этой теме завтра, сейчас мне нужно немного отдохнуть, но я не понимаю, почему передача choices=TheModel # or # choices=TheModel.ojbects.all() ломает все дело.

Есть ли сайт или канал youtube, который показывает некоторые решения этих проблем?

Я перерыл кучу сайтов и видео, но они никогда не обращаются к внешним ключам как к значениям форм (выпадающих элементов), никогда не делают сгруппированные выпадающие элементы (которые я сделал и которые работают без пользовательских форм).

Выборы должны быть кортежем следующего вида:

[
    ('CHOICE_ONE', 'choice_one')
]

Итак, вы можете создать список выбора следующим образом (Предположим, что TheModel имеет поле name.)

choices = [(i.id, i.name) for i in TheModel.objects.all()]

Второе значение будет отображаться пользователю, первое будет установлено в базе данных.

Вы можете использовать ModelChoiceField:

class FooMultipleChoiceForm(forms.Form):
    foo_select = forms.ModelMultipleChoiceField(queryset=None)

    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.fields['foo_select'].queryset = ...

https://docs.djangoproject.com/en/4.1/ref/forms/fields/#modelchoicefield

Вернуться на верх