Как я могу автоматически назначить текущего пользователя автором при создании сообщения?

Как автоматически назначить текущего пользователя автором при создании поста?

Формы:

from django import forms
from publication.models import Userpublication

class PostForm(forms.ModelForm):
    content = forms.CharField(label='',widget=forms.Textarea(attrs={'class': 'content_toggle app-textarea',
                                                                'utofocus': 'true',
                                                                'maxlength': '250',
                                                                'placeholder': 'hello',
                                                                'required': True}))

    class Meta:
        model = Userpublication
        fields = ['content', 'author'] 
        labels = {
            'Content': False,
        }

Просмотров:

def create_post(request):
    if request.method == 'POST':
        form = PostForm(request.POST, initial={'author': request.user})
        
        if form.is_valid():
            form.save()
            return redirect('home')
    else:
        form = PostForm(initial={'author': request.user})
    post_lists = Userpublication.objects.all()
    context = {
        'form': form,
        'post_lists': post_lists,
    }
    return render(request, 'twippie/home.html', context)

введите описание изображения здесь

Вот как это работает.

Но как только я удаляю из формы поле 'author', а 'content' остается, появляется следующая ошибка:

Файл "C:\Users\user\AppData\Local\Programs\Python\Python312\Lib\site-packages
. django\db\backends\sqlite3\base.py", строка 328, in execute return super().execute(query, params) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ django.db.utils.IntegrityError: NOT NULL constraint failed: publication_userpubl ication.author_id

браузер выдает эту ошибку:

IntegrityError at /feed/ NOT NULL constraint failed: publication_userpublication.author_id

Что я мог упустить или не заметить?

моделировать при необходимости:

from django.db import models
from autoslug import AutoSlugField
from django.urls import reverse
from django.contrib.auth.models import User
from django.conf import settings 

class PublishedManager(models.Manager):
    def get_queryset(self):
        return super().get_queryset().filter(is_published=1).order_by('-time_create')

class Userpublication(models.Model):
    author = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)  
    slug = AutoSlugField(max_length=255, unique=True, populate_from='content')
    content = models.TextField('', blank=True)
    time_create = models.DateTimeField('time create ', auto_now_add=True)
    time_update = models.DateTimeField('time update ', auto_now=True)
    is_published = models.BooleanField('is published', default=True)

    objects = models.Manager()
    published = PublishedManager()

    def __str__(self):
        return self.slug

    class Meta:
        ordering = ['-time_create']
        indexes = [
            models.Index(fields=['-time_create'])
        ]

    class Meta:
        verbose_name = 'Post'
        verbose_name_plural = 'Posts'

    def get_absolute_url(self):
        return reverse('post_detail', kwargs={'post_slug': self.slug})

    def get_edit_url(self):
        return reverse('edit_post', kwargs={'post_slug': self.slug})

Я попытался удалить автора из формы, но это дало мне ошибку. А мне нужно, чтобы автор автоматически устанавливался в поле 'author_id'

Просто получите пользователя из запроса (@see Django DOCs) & установите это поле потом в вашей форме.

def create_post(request):
    user = request.user
    ...

Я решил свою проблему. Дело оказалось гораздо проще. У меня есть одно из приложений, которое отвечает за форму публикации и отображения постов. В приложении 2 была добавлена точно такая же функция просмотра. Мне оставалось только удалить ее, и все заработало. Вот почему она выдавала ошибку.

Вернуться на верх