Можно ли зациклить форму пользовательской модели в Django? - PullRequest
1 голос
/ 25 июня 2019

Можно ли создать несколько объектов для модели в django, зациклив одну и ту же форму в цикле for.Я использую форму пользовательской модели.

Мой шаблон:

{% for query in queryset %}
<form method="POST" action="{% url 'academics' %}" style=" padding: 5%">
    {% csrf_token %}                            
    <input type="text" name="Student" class="form-control" id="id_Student" 
    value="{{query}}">
    <input type="text" name="Subject" class="form-control" required id="id_Subject">
    <input type="checkbox" name="Presence" id="id_Presence">
    <button type="Submit" id="submit">Submit</button>
    {% endfor %}
    <button type="Submit" id="submit">Submit</button>
</form>

Мой models.py:

class Attendance(models.Model):
    Student = models.CharField(max_length=100, blank=False)
    Hour = models.CharField(max_length=1, blank=False)
    Subject = models.CharField(max_length=8, blank=False)
    Date = models.DateTimeField(default=timezone.now)
    Presence = models.BooleanField(default=False, blank=False)
    def __str__(self):
        return f'{self.Student}'

Мой views.py:

def academics(request):
    if request.user.is_staff:
        form = forms.AttendanceForm()
        context = {
                    'form': form,
                    'queryset': User.objects.filter(profile__Year='SY',profile__Department='CSE')

                }
        if request.method == "POST" :
            form = forms.AttendanceForm(request.POST)
            if form.is_valid():
                student = request.POST.get('Student')
                hour = request.POST.get('Hour')
                subject = request.POST.get('Subject')
                boolean = request.POST.get('Presence')
                def bool(boolean):
                    if boolean == 'on':
                        return 'True'
                    else:
                        return 'False'
                form = Attendance(Student=student,Hour=hour,Subject=subject,Presence=bool(boolean))
                form.save()                
        return render(request, 'console/academics.html',context)

В настоящее время я могу создавать несколько объектов, но с теми же значениями последней формы.объект создается со значениями последней формы.Здесь я зациклил форму так, чтобы n запросов было сгенерировано для n запросов с именем, заполненным автоматически в первом поле.Я знаю, объяснить это немного сложно.Кто-нибудь может помочь?

Ответы [ 2 ]

0 голосов
/ 25 июня 2019

Мне не совсем понятно, что вы подразумеваете под «циклическим заполнением формы», но если вы хотите, чтобы пользователь мог вводить список произвольной длины аналогичных наборов данных, то вам нужно Formset или ModelFormset . Когда он возвращается, вы проверяете все данные, которые он представил, и, если все в порядке, вы выполняете их итерацию, обычно создавая или изменяя несколько объектов.

0 голосов
/ 25 июня 2019

Из-за репутации я не могу комментировать, но я верю, что именно так вы добились желаемого результата.используя WHILE LOOP .Я сам не очень хорошо разбираюсь в python & Django, но думаю, это логика.Пожалуйста, поправьте меня, если я ошибаюсь, вместо того, чтобы голосовать вниз.

        var = 0
        n = 5
        if request.method == "POST":
            form = forms.AttendanceForm(request.POST)
            if form.is_valid():
                while var < n:
                student = request.POST.get('Student')
                hour = request.POST.get('Hour')
                subject = request.POST.get('Subject')
                boolean = request.POST.get('Presence')

                def bool(boolean):
                    if boolean == 'on':
                        return 'True'
                    else:
                        return 'False'
                form = Attendance(Student=student, Hour=hour,Subject=subject,Presence=bool(boolean))
                form.save()
                var += 1
        return render(request, 'console/academics.html', context)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...