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

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

форма:

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': 'Что у вас нового?',
                                                                'required': True}))

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

вьюха:

def create_post(request):
    if request.method == 'POST':
        # Создаем форму, передавая в нее POST-данные и текущего пользователя
        form = PostForm(request.POST, initial={'author': request.user})
        
        # Проверяем валидность формы
        if form.is_valid():
            # Сохраняем пост в базе данных
            form.save()
            
            # Перенаправляем пользователя на главную страницу
            return redirect('home')
    else:
        # Если запрос GET, создаем экземпляр формы без данных из запроса
        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)

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

Вот такой способ работает.

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

Internal Server Error: /feed/ Traceback (most recent call last): File "C:\Users\user\AppData\Local\Programs\Python\Python312\Lib\site-packages
django\db\backends\utils.py", line 105, in _execute return self.cursor.execute(sql, params) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\user\AppData\Local\Programs\Python\Python312\Lib\site-packages
django\db\backends\sqlite3\base.py", line 328, in execute return super().execute(query, params) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ sqlite3.IntegrityError: NOT NULL constraint failed: publication_userpublication. author_id

The above exception was the direct cause of the following exception:

Traceback (most recent call last): File "C:\Users\user\AppData\Local\Programs\Python\Python312\Lib\site-packages
django\core\handlers\exception.py", line 55, in inner response = get_response(request) ^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\user\AppData\Local\Programs\Python\Python312\Lib\site-packages
django\core\handlers\base.py", line 197, in _get_response response = wrapped_callback(request, *callback_args, **callback_kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\user\AppData\Local\Programs\Python\Python312\Lib\site-packages
django\contrib\auth\decorators.py", line 23, in _wrapper_view return view_func(request, *args, **kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\django\vers0.0.3.1\vers0.2.5 04\twippie_project\twippie\views.py", li ne 16, in create_post form.save() File "C:\django\vers0.0.3.1\vers0.2.5 04\twippie_project\usercreatepost\forms. py", line 29, in save instance.save() File "C:\Users\user\AppData\Local\Programs\Python\Python312\Lib\site-packages
django\db\models\base.py", line 822, in save self.save_base( File "C:\Users\user\AppData\Local\Programs\Python\Python312\Lib\site-packages
django\db\models\base.py", line 909, in save_base updated = self._save_table( ^^^^^^^^^^^^^^^^^ File "C:\Users\user\AppData\Local\Programs\Python\Python312\Lib\site-packages
django\db\models\base.py", line 1067, in _save_table results = self._do_insert( ^^^^^^^^^^^^^^^^ File "C:\Users\user\AppData\Local\Programs\Python\Python312\Lib\site-packages
django\db\models\base.py", line 1108, in _do_insert return manager._insert( ^^^^^^^^^^^^^^^^ File "C:\Users\user\AppData\Local\Programs\Python\Python312\Lib\site-packages
django\db\models\manager.py", line 87, in manager_method return getattr(self.get_queryset(), name)(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\user\AppData\Local\Programs\Python\Python312\Lib\site-packages
django\db\models\query.py", line 1845, in _insert return query.get_compiler(using=using).execute_sql(returning_fields) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\user\AppData\Local\Programs\Python\Python312\Lib\site-packages
django\db\models\sql\compiler.py", line 1823, in execute_sql cursor.execute(sql, params) File "C:\Users\user\AppData\Local\Programs\Python\Python312\Lib\site-packages
django\db\backends\utils.py", line 122, in execute return super().execute(sql, params) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\user\AppData\Local\Programs\Python\Python312\Lib\site-packages
django\db\backends\utils.py", line 79, in execute return self._execute_with_wrappers( ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\user\AppData\Local\Programs\Python\Python312\Lib\site-packages
django\db\backends\utils.py", line 92, in _execute_with_wrappers return executor(sql, params, many, context) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\user\AppData\Local\Programs\Python\Python312\Lib\site-packages
django\db\backends\utils.py", line 100, in _execute with self.db.wrap_database_errors: File "C:\Users\user\AppData\Local\Programs\Python\Python312\Lib\site-packages
django\db\utils.py", line 91, in exit raise dj_exc_value.with_traceback(traceback) from exc_value File "C:\Users\user\AppData\Local\Programs\Python\Python312\Lib\site-packages
django\db\backends\utils.py", line 105, in _execute return self.cursor.execute(sql, params) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\user\AppData\Local\Programs\Python\Python312\Lib\site-packages
django\db\backends\sqlite3\base.py", line 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

Решил свой вопрос. Дело оказалось куда проще. У меня 1 одно из приложений отвечает за форму публикации и выводов постов. Во 2 приложении была добавлена точно такая же функция вьюхи. Стоило её убрать и всё заработало. Поэтому и выдавало ошибку.

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