Czy ktoś może mi pomóc rozwiązać ten błąd?

ValueError at / Create_entry /

Nie można przypisać ">": "Wpis.entry_author" musi być instancją "Użytkownik".

Urls.py

from django.urls import path
from .views import HomeView, EntryView, CreateEntryView

urlpatterns = [
    path('', HomeView.as_view(), name = 'blog-home'),
    path('entry/<int:pk>/', EntryView.as_view(), name = 'entry-detail'),
    path('create_entry/', CreateEntryView.as_view(success_url='/'), name = 'create_entry')
]

Views.py

from django.shortcuts import render
from django.views.generic import ListView, DetailView, CreateView
from .models import Entry

class HomeView(ListView):
   model = Entry
   template_name = 'entries/index.html'
   context_object_name = "blog_entries"

class EntryView(DetailView):
   model = Entry
   template_name = 'entries/entry_detail.html'

class CreateEntryView(CreateView):
   model = Entry
   template_name = 'entries/create_entry.html'
   fields = ['entry_title', 'entry_text']

   def form_valid(self,form):
       form.instance.entry_author = self.request.user
       return super().form_valid(form)

Models.py

from django.db import models
from django.contrib.auth.models import User

class Entry(models.Model):
    entry_title=models.CharField(max_length=50)
    entry_text=models.TextField()
    entry_date=models.DateTimeField(auto_now_add=True)
    entry_author=models.ForeignKey(User, on_delete=models.CASCADE)

    class Meta:
        verbose_name_plural = "entries"

        def __str__(self):
          return f'{self.entry_title}'

Create_entry.html.

{% extends "entries/base.html" %}
{% block content %}
      <div class="col-md-8"><br><br>
        <!-- Blog Post -->
        <div class="card mb-4">
          <div class="card-header">
           Create Blog Post
          </div>
          <div class="card-body">
          <form class="form-conrol" action="" method="post">
            {% csrf_token %}
            {{form.as_p}}
            <button type="submit" class="btn btn-primary">Post Entry</button>
          </form>
          </div>
        </div>

      </div>
{% endblock %}

Potrzebuję twojej pomocy dla tego małego projektu.

0
Sadock 21 listopad 2020, 02:52

1 odpowiedź

Najlepsza odpowiedź

Nie jesteś zalogowany, więc self.request.user nie jest prawdziwym użytkownikiem. Możesz użyć LoginRequiredMixin [Django-doc], aby ograniczyć dostęp do widoku, który można umieścić tylko publikować (i pobieranie) widoku, gdy użytkownik zalogował się:

from django.contrib.auth.mixins import LoginRequiredMixin

class CreateEntryView(LoginRequiredMixin, CreateView):
   model = Entry
   template_name = 'entries/create_entry.html'
   fields = ['entry_title', 'entry_text']

   def form_valid(self,form):
       form.instance.entry_author = self.request.user
       return super().form_valid(form)
0
Willem Van Onsem 20 listopad 2020, 23:57