Я пытаюсь создать динамическую форму после проверки некоторого условия в представлении, и я не уверен, как подойти к нему. Как заполнить атрибут полей в метафайлах форм из моих представлений?Динамическое обновление полей Meta-класса ModelForm с использованием представлений
Ниже представлены мои view.py и мои файлы forms.py.
views.py
Как я заполнить список полей в forms.py из моих взглядов?
from django.shortcuts import render, get_object_or_404
from django.http import HttpResponse
from django import forms
from .models import Master, Label, Assosiative
from .forms import LabelForm, MzasterForm, AssosiativeForm
def master(request,pk):
associate = get_object_or_404(Assosiative, pk=pk)
form = MasterForm(request.POST or None)
if associate.short_text1 == 1:
form.fields['short_text1'] = forms.CharField(label='Short text 1')
if associate.short_text2 == 1:
form.fields['short_text2'] = forms.CharField(label='Short text 2')
if associate.short_text3 == 1:
form.fields['short_text3'] = forms.CharField(label='Short text 3')
if associate.short_text4 == 1:
form.fields['short_text4'] = forms.CharField(label='Short text 4')
if associate.num_field1 == 1:
form.fields['num_field1'] = forms.CharField(label='Number field 1')
if associate.num_field2 == 1:
form.fields['num_field2'] = forms.CharField(label='Number field 2')
if form.is_valid():
try:
short_text1 = form.cleaned_data['short_text1']
short_text2 = form.cleaned_data['short_text2']
short_text3 = form.cleaned_data['short_text3']
short_text4 = form.cleaned_data['short_text4']
num_field1 = form.cleaned_data['num_field1']
num_field2 = form.cleaned_data['num_field2']
form.save()
except Exception, ex:
return HttpResponse("Error %s" %str(ex))
return render(request, 'master.html', {'form':form,})
forms.py
Я не уверен, что делать здесь, так что я могу заполнить поля из моих взглядов
def masterForm(fields_list, *args, **kwargs):
class MasterForm(forms.ModelForm):
class Meta:
model = Master
fields = fields_list
def __init__(self):
super(MasterForm, self).__init__(*args, **kwargs)
return MasterForm()
joke = masterForm(('short_text1',))
[Этот вопрос] (http://stackoverflow.com/questions/297383/dynamically -update-modelforms-meta-class) может помочь. – Alasdair
Я попытался реализовать, поскольку этот вопрос объясняет, но все же он не работает – Hamfri
Что «не работает»? Попробуйте более простую версию 'def get_form (exclude_list):', я думаю, что яснее, когда вы создаете класс формы, затем создавайте его как два отдельных шага. – Alasdair