Задать вопрос
@nikidreiks

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

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

форма:
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)


65d79d53c01d1847271364.jpeg

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

Но как только в форме убираю 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
  • Вопрос задан
  • 104 просмотра
Подписаться 1 Простой Комментировать
Решения вопроса 1
@nikidreiks Автор вопроса
Решил свой вопрос. Дело оказалось куда проще.
У меня 1 одно из приложений отвечает за форму публикации и выводов постов.
Во 2 приложении была добавлена точно такая же функция вьюхи. Стоило её убрать и всё заработало.
Поэтому и выдавало ошибку.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы