Я не могу сохранить объект через мой взгляд. MultiValueDictKeyError at - PullRequest
1 голос
/ 22 января 2020

Я пытаюсь сохранить объект 'Animal' с данными из моей формы, но я получаю сообщение об ошибке.

Это мое мнение:

def addAnimal(request):
    if request.user.id == None:
        return render(request, "deny.html")
    else:
        if request.method == 'POST':
            animal_name = request.POST['animal_name']
            animal_type = request.POST['animal_type']
            animal_age = request.POST['animal_age']
            animal_port = request.POST['animal_port']
            animal = Animal(animal_name=animal_name, animal_age=animal_type, animal_type=animal_age, animal_port=animal_port)
            animal.save()
            return render(request, "home.html", args)

Это модель я пытаюсь сохранить:

class Animal(models.Model):
    animal_name = models.CharField(max_length=255)
    animal_age = models.ManyToManyField(Age)
    animal_type = models.ManyToManyField(Type)
    animal_port = models.ManyToManyField(Port)
    def __str__(self):
        return self.animal_name

И это моя форма:

<form method="post" class="form-signin" action="{% url 'addAnimal' %}">
        {% csrf_token %}
        <img class="mb-4" src="{% static 'images/logo_transparent.png' %}" alt="" width="300" height="300">
        <h1 class="h3 mb-3 font-weight-normal text-white">Adicione o seu Animal de Estimação</h1>

        <input type="text" id="animal_name" name="animal_name" class="form-control"
               placeholder="Nome do Seu Animal de Estimação">

        <select class="form-control" id="animal_type" name="ration_type">
            <option value="Cão">Cão</option>
            <option value="Gato">Gato</option>
        </select>
        <select class="form-control" id="animal_age" name="animal_age">
            <option value="Junior">Junior</option>
            <option value="Adulto">Adulto</option>
            <option value="Senior">Senior</option>
        </select>
        <select class="form-control" id="animal_port" name="animal_port">
            <option value="Pequeno">Pequeno</option>
            <option value="Médio">Médio</option>
            <option value="Grande">Grande</option>
        </select>
        <div> &nbsp</div>
        <button class="btn btn-lg btn-primary btn-block" type="submit">Adicionar</button>
    </form>

И распечатка, если вам нужно: Print of the Form

Обновление Я получаю новую ошибку:

TypeError at /addAnimal/
Direct assignment to the forward side of a many-to-many set is prohibited. Use animal_age.set() instead.

Как я могу ее решить?

1 Ответ

1 голос
/ 22 января 2020

Это из-за вашего POST-запроса.

Попробуйте вместо request.POST.get(). И / или когда вы берете атрибуты из POST, попробуйте ввести, например, request.POST['animal name', None] или request.POST.get('animal name', None), где None можно заменить любым значением по умолчанию. Я думаю, что это проблема нулевой проверки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...