zip и formset вместе в шаблоне Django - PullRequest
0 голосов
/ 27 октября 2019

я пытаюсь использовать formset_factory и что-то из моей базы данных в zip и использовать в шаблоне вот моя форма:

class class_attandance_form(forms.ModelForm):
    choise1 = [(True, 'ح'),
               (False, 'غ')]
    choise2 = [('مثبت', 'مثبت'),
               ('منفی', 'منفی')]
    attendance = forms.ChoiceField(required=True, choices=choise1)
    activity = forms.ChoiceField(required=False, choices=choise2)
    score = forms.CharField(required=False, max_length=3)
    user = forms.CharField(required=False,max_length=20)

    class Meta:
        model = Class_Book
        fields = ('activity','attendance','score','user')

и вот мое мнение:

def class_attendance(request):
    term = Term.objects.filter(lesson__in=[1,])
    form1 = formset_factory(class_attandance_form,max_num=len(term),extra=len(term))
    form = form1()
    term_form = zip(list(term), list(form))
    if request.method == 'POST':
       query = form1(request.POST or None)
       if query.is_valid():
           q = query.cleaned_data
           print(q)

return render(request,'teacher/class_attendance.html',{'term_form':term_form})

и мой темп:

<form role="form" method="post">
    {% csrf_token %}
    <table cellspacing="0" class="table">
        <thead>
        <tr>
            <th>ردیف</th>
            <th>نام و نام خانوادگی</th>
            <th>حضور و غیاب</th>
            <th colspan="2">نمره</th>
        </tr>
        </thead>
        <tbody>

        {% for term, form in term_form %}
            <tr class="class_book" id="{{ term.id }}">
                <td>{{ forloop.counter }}</td>
                <td>{{ term.student.first_name }} {{ term.student.last_name }}</td>
                <td>
                    {{ form.attendance }}
                </td>
                <td>
                    {{ form.activity }}
                </td>
                <td>
                    {{ form.score }}
                </td>
            </tr>
            {{ form.user }}
            <script>
            $('#id_form-{{ forloop.counter0 }}-user').val({{ term.id }})
            </script>
        {% endfor %}
        </tbody>
    </table>
    <button id="submit" class="button" type="submit">ثبت</button>

</form>

почему, когда я использую query = form1(request.POST or None), я получил эту ошибку "Данные ManagementForm отсутствуют при использовании префикса Formset" и можете ли вы сказать мне, что {{formset.managment_form}} работает для

1 Ответ

0 голосов
/ 30 октября 2019

Я очень стараюсь, и я нахожу, как я могу это сделать, вы должны отправить свой formset и queryset в формате zip и снова отправить formset для do {{formset.managment_form}} в шаблоне формы, код представления:

def class_attendance(request):
    term = Term.objects.filter(lesson__in=[1,])
    form1 = formset_factory(class_attandance_form,max_num=len(term),extra=len(term))
    form = form1()
    term_form = zip(list(term), list(form))
    if request.method == 'POST':
        query = form1(request.POST or None)
        print(query.errors)
        if query.is_valid():
            q = query.cleaned_data
            print('sss',q)

    return render(request,'teacher/class_attendance.html',{'term_form':term_form,'form':form})

и форма:

class class_attandance_form(forms.ModelForm):
    choise1 = [(True, 'ح'),
               (False, 'غ')]
    choise2 = [(True, 'مثبت'),
               (False, 'منفی')]
    attendance = forms.ChoiceField(required=True, choices=choise1,
                                   widget=forms.RadioSelect(attrs={'class': 'btn_attendance'}))
    activity = forms.ChoiceField(required=False, choices=choise2,
                                 widget=forms.RadioSelect(attrs={'class': 'btn_attendance'}))
    score = forms.CharField(required=False, max_length=3,
                            widget=forms.TextInput(attrs={'class': 'text-field blue-field', 'placeholder': 'نمره'}))
    user = forms.CharField(required=False,max_length=20,widget=forms.TextInput(attrs={'class':'student'}))

    class Meta:
        model = Class_Book
        fields = ('activity','attendance','score')

и мой шаблон:

<form role="form" dir="rtl" id="frm" autocomplete="off" method="post" enctype="multipart/form-data">
    {% csrf_token %}
    {{ form.management_form }}
    <table cellspacing="0" class="table">
        <thead>
        <tr>
            <th>ردیف</th>
            <th>نام و نام خانوادگی</th>
            <th>حضور و غیاب</th>
            <th colspan="2">نمره</th>
        </tr>
        </thead>
        <tbody>

        {% for term, form in term_form %}
            <tr class="class_book" id="">
                <td>{{ forloop.counter }}</td>
                <td>{{ term.student }}</td>
                <td>
                    <div class="form-group" style="margin-bottom: 0">
                        {{ form.attendance }}
                    </div>
                </td>
                <td>
                    <div class="form-group" style="margin-bottom: 0">
                        {{ form.activity }}
                    </div>
                </td>
                <td>
                    <div class="form-group">
                        {{ form.score }}
                    </div>
                </td>
            </tr>
            {{ form.user }}
            <script>
            $('#id_form-{{ forloop.counter0 }}-user').val({{ term.student.id }})
            </script>
        {% endfor %}
        </tbody>
    </table>
    <button id="submit" class="button" type="submit">ثبت</button>

</form>

я надеюсь, что это работает для вас, ребята

...