Django получение ввода radio select в форме

Что мне нужно, так это страница, где для каждого пользователя можно выбрать, присутствовал ли он, разрешено ли отсутствие или нет. Мне удалось создать страницу, где это возможно и может быть представлено, смотрите изображение, которое я прикрепил. Как код работает сейчас

Моя проблема в том, что я понятия не имею, как я могу получить доступ к данным, которые я отправил. Я использовал name={{user.id}} для имени радиокнопки, но как мне теперь получить доступ к этому входу в моем представлении? Я хочу иметь возможность делать что-то другое, если, например, выбран Absent, но я не знаю, как это сделать.

Вот мой код: baksgewijs/mbaksgewijs_attendance.html

    <form action="" method=POST>
        {% csrf_token %}
        <div class="table-responsive fixed-length">
                <table id = "userTable" class="table table-striped table-hover table-sm table-bordered">
                        <tbody>
                        {% for user in users %}
                                <tr>
                                        <td> {{ user }}
                                        <td>
                                            <div class="form-check">
                                                <input class="form-check-input" type="radio" name={{user.id}} id="radio">
                                                <label class="form-check-label" for="flexRadioDefault1">
                                                  Aanwezig
                                                </label>
                                            </div>
                                            <div class="form-check">
                                                <input class="form-check-input" type="radio" name={{user.id}} id="radio">
                                                <label class="form-check-label" for="flexRadioDefault2">
                                                  Afwezig
                                                </label>
                                            </div>
                                            <div class="form-check">
                                                <input class="form-check-input" type="radio" name={{user.id}} id="radio">
                                                <label class="form-check-label" for="flexRadioDefault2">
                                                 Geoorloofd afwezig
                                                </label>
                                            </div>
                                        </td>
                                </tr>
                        {% endfor %}
                        </tbody>
                </table>
        </div>
<br>
<button class='btn btn-primary active' type="submit"> Update Peloton </button>
</div>

views.py

def baksgewijs_attendance(request):
    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/mbaksgewijs_attendance.html', {"form": CreateAttendance})
    return render(request, "baksgewijs/mbaksgewijs_attendance.html", {
        "users" : users
    })

forms.py

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)
        }

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

Я уже задавал вопрос об этом раньше, но не совсем понял, как это исправить, поэтому сейчас попробовал другой подход. У меня такое чувство, что теперь и с моим вводом ничего не получается. Заранее большое спасибо за помощь. <3

Вам просто нужно добавить value к вашим радиокнопкам. Тогда при получении значения радиокнопок с помощью request.POST.get('your_input_name') вы получите value той радиокнопки, которая была выбрана.

В вашем шаблоне должно получиться что-то вроде этого :

<div class="form-check">
    <input class="form-check-input" type="radio" name={{user.id}} id="radio" value="Aanwezig">
    <label class="form-check-label" for="flexRadioDefault1">
        Aanwezig
    </label>
</div>
<div class="form-check">
    <input class="form-check-input" type="radio" name={{user.id}} id="radio" value="Afwezig">
    <label class="form-check-label" for="flexRadioDefault2">
        Afwezig
    </label>
</div>
<div class="form-check">
    <input class="form-check-input" type="radio" name={{user.id}} id="radio" value="Geoorloofd afwezig">
    <label class="form-check-label" for="flexRadioDefault2">
       Geoorloofd afwezig
    </label>
</div>

Затем, в вашем файле views.py :

if form.is_valid():
    form.save()
    for user in users:
        user_attendance = form.cleaned_data.get(user.id)
        # Do something with your user depending on the value of user_attendance
    message = messages.success(request, ("De aanwezigheid is opgeslagen"))
    return HttpResponseRedirect(reverse("baksgewijs_index"), {"message" : message})
Вернуться на верх