将用户名链接到我们创建的帖子

2024-10-01 15:28:25 发布

您现在位置:Python中文网/ 问答频道 /正文

我想链接的用户谁创建了他们的用户名,这样人们就知道谁是张贴了,但我似乎不能让它工作,是的,我已经登录,我有一个工作登记和登录表了

每次登录时,我从表单提交一些新闻时,都会出现以下错误NOT NULL constraint failed: news_news.author_id

型号.py

from django.db import models
from django.contrib.auth.models import User
from markdownx.models import MarkdownxField
from markdownx.utils import markdownify
from taggit.managers import TaggableManager

class News(models.Model):
    author = models.ForeignKey(User, unique=True, on_delete=models.CASCADE)
    title = models.CharField(max_length=150)
    short_desc = models.CharField(max_length=500)
    content = MarkdownxField()
    tags = TaggableManager()
    slug = models.SlugField(unique=True)
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)

    def __str__(self):
        return self.title

视图.py

from django.shortcuts import render, redirect, get_object_or_404
from .models import Category, News
from .forms import NewNewsForm
from django.shortcuts import render

def show_news_view(request):
    news = News.objects.values('author', 'title', 'short_desc', 'tags', 'created_at', 'updated_at')

    context = {
        'news': news
    }
    return render(request, "news/news_home.html", context)

def new_news_form_view(request):
    if request.method == "POST":
        form = NewNewsForm(request.POST or None)
        if form.is_valid():
            form.save()
            form = NewNewsForm()

            return redirect('/news')
    else:
        form = NewNewsForm()

    context = {
        'form': form
    }
    return render(request, "news/news_form.html", context)

编辑:

表单.py

from django import forms
from .models import News

class NewNewsForm(forms.ModelForm):
    class Meta:
        model = News
        fields = ['title', 'short_desc', 'content', 'category', 'tags', 'slug']

新闻表格.html

{% extends "base.html" %}

{% block content %}

{% if user.is_authenticated %}
<form action="" method="POST">
    {% csrf_token %}
    {{ form.as_p }}

    <button type="submit">Submit</button>
</form>
{% else %}
    <p>Please login before you can submit a news story.</p>
{% endif %}

{% endblock content %}

Tags: djangofromimportformtruereturntitlemodels
1条回答
网友
1楼 · 发布于 2024-10-01 15:28:25

您没有传递用户

稍后使用更简单的解决方案进行编辑:

保存表单时只需传递commit=False。它将创建News对象,而不将其提交给DB。只需随后设置作者并保存对象

def new_news_form_view(request):
    if request.method == "POST":
        form_data = request.POST or None
        form = NewNewsForm(form_data)
        if form.is_valid():
            news = form.save(commit=False)
            news.author = request.user
            news.save()
            return redirect('/news')
    else:
        form = NewNewsForm()

    context = {
        'form': form
    }
    return render(request, "news/news_form.html", context)

相关问题 更多 >

    热门问题