как сохранить много ко многим полям в Джанго - PullRequest
0 голосов
/ 20 апреля 2019

Я пытаюсь сохранить студентов из формы addstudent, но она не сохраняет студентов, и она отображает сообщение об ошибке «ошибка в форме». Есть ли решения для этого кода. Я думаю, что ошибка находится в шаблоне HTML. Ошибка выглядит следующим образом: объект AttributeError at / Students / add / student / 'ErrorDict' не имеет атрибута 'status_code' Метод запроса: URL-адрес запроса POST: http://127.0.0.1:8000/students/add/student/ Версия Django: 2.1.5 Тип исключения: AttributeErrorЗначение исключения:
Объект «ErrorDict» не имеет атрибута «status_code»

models.py

class Course(models.Model):
    title = models.CharField(max_length=250)
    basic_price = models.CharField(max_length=100)
    advanced_price = models.CharField(max_length=100)
    basic_duration = models.CharField(max_length=50)
    advanced_duration = models.CharField(max_length=50)


class Student(models.Model):
    name = models.CharField(max_length=100)
    course = models.ManyToManyField(Course)
    address = models.CharField(max_length=200)
    email = models.EmailField()
    phone = models.CharField(max_length=15)
    image = models.ImageField(upload_to='Students',blank=True)
    joined_date = models.DateField()

forms.py

class AddStudentForm(forms.ModelForm):
    class Meta:
        model = Student
        fields = '__all__'

views.py

def addstudent(request):
    courses = Course.objects.all()
    if request.method == 'POST':
        form = AddStudentForm(request.POST,request.FILES)
        if form.is_valid():
            student = form.save()
            student.save()
            messages.success(request,'student saved.')
            return redirect('students:add_student')
      #  else:
           # return HttpResponse(form.errors) --> it returns course

    else:
        form = AddStudentForm()
    return render(request,'students/add_student.html',{'form':form,'courses':courses})

add_student.html

<form action="{% url 'students:add_student' %}" method="post" enctype="multipart/form-data">
                    {% csrf_token %}
                    <div class="form-group">
                        <h5>Full Name <span class="text-danger">*</span></h5>
                        <div class="controls">
                            <input type="text" name="name" class="form-control" required data-validation-required-message="This field is required"> </div>
                    </div>
                    <div class="form-group">
                        <h5>Course <span class="text-danger">*</span></h5>
                        <div class="controls">
                            <select name="course" id="select" required class="form-control">
                                <option value="">Select Your Course</option>
                                {% for course in courses %}
                                <option value="{{course.title}}">{{course.title}}</option>
                                {% endfor %}

                            </select>
                        </div>
                    </div>
                    <div class="form-group">
                        <h5>Address<span class="text-danger">*</span></h5>
                        <div class="controls">
                            <input type="text" name="address" class="form-control" required data-validation-required-message="This field is required"> </div>
                    </div>
                    <div class="form-group">
                        <h5>Phone Number <span class="text-danger">*</span></h5>
                        <div class="controls">
                            <input type="text" name="phone" data-validation-match-match="password" class="form-control" required> </div>
                    </div>
                    <div class="form-group">
                        <h5>Email <span class="text-danger">*</span></h5>
                        <div class="controls">
                            <input type="email" name="email" data-validation-match-match="password" class="form-control" required> </div>
                    </div>
                      <div class="form-group">
                        <h5>Date <span class="text-danger">*</span></h5>
                        <div class="controls">
                            <input type="date" name="joined_date" data-validation-match-match="password" class="form-control" required> </div>
                    </div>
                    <div class="form-group">
                        <h5>Image <span class="text-danger">*</span></h5>
                        <div class="controls">
                            <input type="file" name="image" class="form-control" > </div>
                    </div>
                    <div class="text-xs-right">
                        <button type="submit" class="btn btn-info">Submit</button>
                    </div>
                </form>

1 Ответ

2 голосов
/ 20 апреля 2019

Вы должны вывести значение form.errors, как предлагается в комментариях, чтобы обнаружить точную ошибку.Однако я вижу две непосредственные проблемы, которые могут привести к сбою проверки формы.

Во-первых, поскольку ваша форма содержит отправку изображения, вы должны установить enctype в multipart/form-data в шаблоне:

<form action="{% url 'students:add_student' %}" method="post" enctype="multipart/form-data">

Во-вторых, загруженное изображение существует в request.FILES, поэтому вам нужно передать его в форму:

form = AddStudentForm(request.POST, request.FILES)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...