Невозможно назначить «Note.user» должен быть экземпляр «Пользователь». Django - PullRequest
0 голосов
/ 28 января 2020

Я получаю следующую ошибку при запуске моего django кода. Я абсолютный новичок, и я следовал руководству по созданию приложения crud.

При вводе информации в форме html я получаю следующую ошибку

ValueError: Cannot назначить django .contrib.auth.models.AnonymousUser объект в 0x00000288775D3EF0: «Note.user» должен быть экземпляром «User»

из form.instance.user = request.user в моих views.py

views.py

from django.shortcuts import render
from django.shortcuts import render, redirect
from .models import Note

# Create your views here.

from .forms import NoteModelForm


# CRUD - create update retrieve and delete

def createView(request):
    form = NoteModelForm(request.POST or None, request.FILES or None)
    if form.is_valid():
        form.instance.user = request.user
        form.save()
        return redirect('/')

    context = {
        'form': form
    }

    return render(request, "create.html", context) 

forms.py

from django import forms

from .models import Note

class NoteModelForm(forms.ModelForm):
    class Meta:
        model = Note
        fields = ['title','url','image']

создать. html

<!DOCTYPE html>
<html>
<head>
    <title>CRUD APP</title>
</head>
<body>
    <form method="POST"  enctype="multipart/form-data">
        {% csrf_token %}
        {{ form.as_p }}
        <input type="submit" name="submit">
    </form>
</body>
</html> 

1 Ответ

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

Если пользователь не вошел в систему, request.user выдает AnonymousUser, который не может быть назначен экземпляру формы.

Чтобы избежать этой ситуации, вы можете добавить условие перед доступом к представлению. Для этого вы можете использовать login_required decorator, как показано ниже

from django.contrib.auth.decorators import login_required

@login_required
def createView(request):
    ....
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...