已解决-无法在Django的HTML表单上显示表单中的多对多字段

问题描述 投票:0回答:1

我无法通过HTML表单将输入数据转换为多对多字段数据。该如何解决?

这是我的代码:

models.py

class SetStaffSchedule(models.Model):  # generated work for staffs by admins
    schedule = models.ManyToManyField('Staff')
    shift = models.DateTimeField("Shift")
    detail = models.TextField("Task Detail", max_length=200)

    def __str__(self):
        return self.shift

    def __str__(self):
        return self.detail

forms.py

from django import forms
from attendance.models import SetStaffSchedule, Staff


class SetStaffScheduleForm(forms.ModelForm):

    class Meta:
        model = SetStaffSchedule
        fields = ['schedule','shift', 'detail']

views.py

    def schedules(request):  # getting schedules for staffs' work
    all_schedules = SetStaffSchedule.objects.all()

    context = {
        'all_schedules': all_schedules
    }
    return render(request, 'getschedule.html', context)


def post(request):  # posting schedules for staffs' work
    form = SetStaffScheduleForm(request.POST or None)
    if form.is_valid():
        instance = form.save(commit=False)
        instance.save();
        return redirect ('schedules')
    return render(request, 'post_schedules.html', {"form": form})

post_schedules.html

    {% csrf_token %}
    {{ form.as_p }}
python django forms templates manytomanyfield
1个回答
0
投票

您需要处理请求方法为“ GET”的情况,以便您可以在不运行任何验证的情况下呈现表单。如果用户随后以“ POST”形式提交表单,则应运行验证/保存

def create_staff_schedule(request):  # posting schedules for staffs' work
    if request.method == 'GET':
        form = SetStaffScheduleForm()
    else:  #  POST
        form = SetStaffScheduleForm(request.POST)
        if form.is_valid():
            form.save()
            return redirect('schedules')
    return render(request, 'post_schedules.html', {"form": form})

您还需要将表单包装在form标记中,并且方法设置为“ post”

<form method="post">
    {% csrf_token %}
    {{ form.as_p }}
</form>
© www.soinside.com 2019 - 2024. All rights reserved.