Ссылка Имя пользователя на сообщение, созданное пользователем - PullRequest
0 голосов
/ 17 октября 2019

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

Каждый раз, когда я захожу, чтобы отправить какие-либо новости из формы при входе в систему, я получаю эту ошибку NOT NULL constraint failed: news_news.author_id

models.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)

РЕДАКТИРОВАТЬ:

forms.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']

news_form.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 %}

1 Ответ

0 голосов
/ 17 октября 2019

Вы не передаете пользователя.

Позже отредактируйте с помощью более простого решения:

Просто передайте commit=False при сохранении формы. Который создаст ваш News объект без отправки его в БД. Просто установите автора впоследствии и сохраните объект.

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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...