Python 不从createView窗体重定向到主窗体

Python 不从createView窗体重定向到主窗体,python,django,django-views,django-forms,Python,Django,Django Views,Django Forms,我正在学习新的django开发。在一个博客项目中,我面临一个问题,即在发布新博客时,不会重定向到主页/博客页面。我试着手动回家,上面写着 操作错误位于/blog/ 没有这样的专栏:App\u Blog\u Blog.author\u id 我试过几次调试,但在文档中搜索到的代码无法使用此作者id。以下是我的代码: 视图.py class CreateBlog(LoginRequiredMixin, CreateView): model = Blog template_name =

我正在学习新的django开发。在一个博客项目中,我面临一个问题,即在发布新博客时,不会重定向到主页/博客页面。我试着手动回家,上面写着

操作错误位于/blog/ 没有这样的专栏:App\u Blog\u Blog.author\u id

我试过几次调试,但在文档中搜索到的代码无法使用此作者id。以下是我的代码:

视图.py

class CreateBlog(LoginRequiredMixin, CreateView):
    model = Blog
    template_name = 'App_Blog/create_blog.html'
    fields = ('blog_title', 'blog_content', 'blog_image',)

    def form_valid(self, form):
        blog_obj = form.save(commit=False)
        blog_obj.author = self.request.user
        title = blog_obj.blog_title
        blog_obj.slug = title.replace(" ", "-") + "-" + str(uuid.uuid4())
        blog_obj.save()
        return HttpResponseRedirect(reverse('index'))


class BlogList(ListView):
    context_object_name = 'blogs'
    model = Blog
    template_name = 'App_Blog/blog_list.html'
from django.urls import path
from App_Blog import views

app_name = 'App_Blog'

urlpatterns = [
    path('', views.BlogList.as_view(), name='blog_list'),
    path('write/', views.CreateBlog.as_view(), name='create_blog'),
]
from django.db import models
from django.contrib.auth.models import User

# Create your models here.


class Blog(models.Model):
    author = models.ForeignKey(
        User, on_delete=models.CASCADE, related_name='post_author')
    blog_title = models.CharField(max_length=264, verbose_name="Put a Title")
    slug = models.SlugField(max_length=264, unique=True)
    blog_content = models.TextField(verbose_name="What is on your mind?")
    blog_image = models.ImageField(
        upload_to='blog_images', verbose_name="Image")
    publish_date = models.DateTimeField(auto_now_add=True)
    update_date = models.DateTimeField(auto_now=True)

    def __str__(self):
        return self.blog_title
主项目文件的Views.py

def index(request):
    return HttpResponseRedirect(reverse('App_Blog:blog_list'))
url.py

class CreateBlog(LoginRequiredMixin, CreateView):
    model = Blog
    template_name = 'App_Blog/create_blog.html'
    fields = ('blog_title', 'blog_content', 'blog_image',)

    def form_valid(self, form):
        blog_obj = form.save(commit=False)
        blog_obj.author = self.request.user
        title = blog_obj.blog_title
        blog_obj.slug = title.replace(" ", "-") + "-" + str(uuid.uuid4())
        blog_obj.save()
        return HttpResponseRedirect(reverse('index'))


class BlogList(ListView):
    context_object_name = 'blogs'
    model = Blog
    template_name = 'App_Blog/blog_list.html'
from django.urls import path
from App_Blog import views

app_name = 'App_Blog'

urlpatterns = [
    path('', views.BlogList.as_view(), name='blog_list'),
    path('write/', views.CreateBlog.as_view(), name='create_blog'),
]
from django.db import models
from django.contrib.auth.models import User

# Create your models here.


class Blog(models.Model):
    author = models.ForeignKey(
        User, on_delete=models.CASCADE, related_name='post_author')
    blog_title = models.CharField(max_length=264, verbose_name="Put a Title")
    slug = models.SlugField(max_length=264, unique=True)
    blog_content = models.TextField(verbose_name="What is on your mind?")
    blog_image = models.ImageField(
        upload_to='blog_images', verbose_name="Image")
    publish_date = models.DateTimeField(auto_now_add=True)
    update_date = models.DateTimeField(auto_now=True)

    def __str__(self):
        return self.blog_title
型号.py

class CreateBlog(LoginRequiredMixin, CreateView):
    model = Blog
    template_name = 'App_Blog/create_blog.html'
    fields = ('blog_title', 'blog_content', 'blog_image',)

    def form_valid(self, form):
        blog_obj = form.save(commit=False)
        blog_obj.author = self.request.user
        title = blog_obj.blog_title
        blog_obj.slug = title.replace(" ", "-") + "-" + str(uuid.uuid4())
        blog_obj.save()
        return HttpResponseRedirect(reverse('index'))


class BlogList(ListView):
    context_object_name = 'blogs'
    model = Blog
    template_name = 'App_Blog/blog_list.html'
from django.urls import path
from App_Blog import views

app_name = 'App_Blog'

urlpatterns = [
    path('', views.BlogList.as_view(), name='blog_list'),
    path('write/', views.CreateBlog.as_view(), name='create_blog'),
]
from django.db import models
from django.contrib.auth.models import User

# Create your models here.


class Blog(models.Model):
    author = models.ForeignKey(
        User, on_delete=models.CASCADE, related_name='post_author')
    blog_title = models.CharField(max_length=264, verbose_name="Put a Title")
    slug = models.SlugField(max_length=264, unique=True)
    blog_content = models.TextField(verbose_name="What is on your mind?")
    blog_image = models.ImageField(
        upload_to='blog_images', verbose_name="Image")
    publish_date = models.DateTimeField(auto_now_add=True)
    update_date = models.DateTimeField(auto_now=True)

    def __str__(self):
        return self.blog_title
创建_blog.html

{% extends 'base.html' %}
{% load crispy_forms_tags %}

{% block title_block %}
Write a Blog
{% endblock title_block %}


{% block body_block %}
<h2>Start Writing:</h2>
<form method="POST">
    {{ form | crispy }}
    {% csrf_token %}
    <br>
    <button type="button" class="btn btn-success btn-sm">Publish</button>
</form>
{% endblock body_block %}
{% extends 'base.html' %}
{% block title_block %} Home {% endblock %}


{% block body_block %}

{% for blog in blogs %}
<h3>{{blog.blog_title}}</h3>
<h6>{{blog.publish_date}}</h6>
{% endfor %}

{% endblock %}
{%extends'base.html%}
{%load crispy_forms_tags%}
{%block title\u block%}
写博客
{%endblock title_block%}
{%block body_block%}
开始写:
{{form | crispy}}
{%csrf_令牌%}

发表 {%endblock body_block%}
blog_list.html

{% extends 'base.html' %}
{% load crispy_forms_tags %}

{% block title_block %}
Write a Blog
{% endblock title_block %}


{% block body_block %}
<h2>Start Writing:</h2>
<form method="POST">
    {{ form | crispy }}
    {% csrf_token %}
    <br>
    <button type="button" class="btn btn-success btn-sm">Publish</button>
</form>
{% endblock body_block %}
{% extends 'base.html' %}
{% block title_block %} Home {% endblock %}


{% block body_block %}

{% for blog in blogs %}
<h3>{{blog.blog_title}}</h3>
<h6>{{blog.publish_date}}</h6>
{% endfor %}

{% endblock %}
{%extends'base.html%}
{%block title_block%}主页{%endblock%}
{%block body_block%}
{%用于blogs%中的blog}
{{blog.blog_title}
{{blog.publish_date}
{%endfor%}
{%endblock%}
创建博客表单:

现场显示错误:


您能添加型号代码吗?@Tamir抱歉错过了。立即更新您是否进行了迁移并迁移了数据库?您是否迁移了您的模型?我想这就是问题所在issue@WillemVanOnsem没有。我只是尝试了一下,它说,“您正在尝试在没有默认值的情况下向blog添加一个不可为null的字段‘author’;我们无法这样做(数据库需要一些东西来填充现有行)。请选择一个修复方法:1)现在提供一个一次性默认值(将在所有现有行上为此列设置一个null值)2)退出,让我在models.py中添加一个默认值