django-在循环中获取无线电按钮的输入

发布于 2025-02-11 23:12:21 字数 2345 浏览 1 评论 0原文

我需要一个缺席控制的页面,所有用户都循环循环,并且在每个用户显示3个无线电按钮时:存在,缺席和允许的_absent。为每个用户填写后,应提交。

这是我代码的重要部分:

html baksgewijs_attendance.html

   <form class="createattendance-form" action="" method="POST" enctype="multipart/form-data">
            {% csrf_token %}
            {{ form.non_field_errors }}
            {% for user in users %}
            {{ user }}
            <div class="form-group">
                <div>
                    {{ form.attendance}}
                    {{ form.attendance.errors }}
                </div>
            </div>
            {% endfor %}
            <br>
        <div class="form-group">
            <button type="submit" class="btn btn-primary save"> Save absence </button>
        </div>
        </form>

models.py

class Attendance(models.Model):
    attendance = models.CharField(max_length=13)
    user = models.ForeignKey('puma_core.User', on_delete=models.CASCADE)
    baksgewijs = models.ForeignKey(Baksgewijs, on_delete=models.CASCADE)
    def __str__(self):
        return self.attendance
 

forms.py

attendance_choices = (
    ('absent', 'Afwezig'),
    ('allowedabsent', 'Geoorloofd afwezig'),
    ('present', 'Aanwezig'),
)


class CreateAttendance(forms.ModelForm):
    class Meta:
        model = Attendance
        fields = ['attendance']
        widgets = {
            'attendance': forms.RadioSelect(choices=attendance_choices)
        }

views.pys.py

def baksgewijs_attendance(request):
    peloton = Peloton.objects.all()
    users = User.objects.all()
    if request.method == "POST":
        form = CreateAttendance(request.POST, request.FILES)
        if form.is_valid():
            form.save()
            message = messages.success(request, ("De aanwezigheid is opgeslagen"))
            return HttpResponseRedirect(reverse("baksgewijs_index"), {
                "message" : message
            })
        else:
            return render(request, 'baksgewijs/baksgewijs_attendance.html', {"form": CreateAttendance})

user.objects.all提供了所有用户名。

问题是:这样,我只能总共选择一个选项,而我希望能够选择每个用户的缺席。我该如何解决?

I need a page for absence control, where there are looped over all users and with each user is displayed 3 radio buttons : present, absent and allowed_absent. After it is filled in for each user, it should be submitted.

This is the important part of my code:

HTML baksgewijs_attendance.html

   <form class="createattendance-form" action="" method="POST" enctype="multipart/form-data">
            {% csrf_token %}
            {{ form.non_field_errors }}
            {% for user in users %}
            {{ user }}
            <div class="form-group">
                <div>
                    {{ form.attendance}}
                    {{ form.attendance.errors }}
                </div>
            </div>
            {% endfor %}
            <br>
        <div class="form-group">
            <button type="submit" class="btn btn-primary save"> Save absence </button>
        </div>
        </form>

Models.py

class Attendance(models.Model):
    attendance = models.CharField(max_length=13)
    user = models.ForeignKey('puma_core.User', on_delete=models.CASCADE)
    baksgewijs = models.ForeignKey(Baksgewijs, on_delete=models.CASCADE)
    def __str__(self):
        return self.attendance
 

forms.py

attendance_choices = (
    ('absent', 'Afwezig'),
    ('allowedabsent', 'Geoorloofd afwezig'),
    ('present', 'Aanwezig'),
)


class CreateAttendance(forms.ModelForm):
    class Meta:
        model = Attendance
        fields = ['attendance']
        widgets = {
            'attendance': forms.RadioSelect(choices=attendance_choices)
        }

views.py

def baksgewijs_attendance(request):
    peloton = Peloton.objects.all()
    users = User.objects.all()
    if request.method == "POST":
        form = CreateAttendance(request.POST, request.FILES)
        if form.is_valid():
            form.save()
            message = messages.success(request, ("De aanwezigheid is opgeslagen"))
            return HttpResponseRedirect(reverse("baksgewijs_index"), {
                "message" : message
            })
        else:
            return render(request, 'baksgewijs/baksgewijs_attendance.html', {"form": CreateAttendance})

User.objects.all gives all user names.

The problem is: in this way I can only select one option in total, while I want to be able to select the absence per user. How can I solve this?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

甜`诱少女 2025-02-18 23:12:21

您应该考虑使用表单集代替表单:

.djangoproject.com/en/4.0/topics/forms/Forms/

给您一个想法

attendance_choices = (
    ('absent', 'Afwezig'),
    ('allowedabsent', 'Geoorloofd afwezig'),
    ('present', 'Aanwezig'),
)


class CreateAttendance(forms.ModelForm):
    class Meta:
        model = Attendance
        fields = ['user', 'attendance']
        widgets = {
            'attendance': forms.RadioSelect(choices=attendance_choices)
        }

from django.forms import formset_factory
AttendanceFormSet = formset_factory(CreateAttendance)

def baksgewijs_attendance(request):
    peloton = Peloton.objects.all()
    users = User.objects.all()
    if request.method == "POST":
        formset = AttendanceFormSet(request.POST, request.FILES)
        if formset.is_valid():
            formset.save()
            message = messages.success(request, ("De aanwezigheid is opgeslagen"))
            return HttpResponseRedirect(reverse("baksgewijs_index"), {
                "message" : message
            })
        else:
            return render(request, 'baksgewijs/baksgewijs_attendance.html', {"formset": AttendanceFormSet(initial={'user': users})})

You should look into using a formset instead of a form:

https://docs.djangoproject.com/en/4.0/topics/forms/formsets/

To give you an idea forms.py whould look something like this:

attendance_choices = (
    ('absent', 'Afwezig'),
    ('allowedabsent', 'Geoorloofd afwezig'),
    ('present', 'Aanwezig'),
)


class CreateAttendance(forms.ModelForm):
    class Meta:
        model = Attendance
        fields = ['user', 'attendance']
        widgets = {
            'attendance': forms.RadioSelect(choices=attendance_choices)
        }

from django.forms import formset_factory
AttendanceFormSet = formset_factory(CreateAttendance)

And then the vieuws should be modified to use formsets

def baksgewijs_attendance(request):
    peloton = Peloton.objects.all()
    users = User.objects.all()
    if request.method == "POST":
        formset = AttendanceFormSet(request.POST, request.FILES)
        if formset.is_valid():
            formset.save()
            message = messages.success(request, ("De aanwezigheid is opgeslagen"))
            return HttpResponseRedirect(reverse("baksgewijs_index"), {
                "message" : message
            })
        else:
            return render(request, 'baksgewijs/baksgewijs_attendance.html', {"formset": AttendanceFormSet(initial={'user': users})})
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文