Как сделать автоматическое назначение текущего пользователя в качестве автора при создании поста?
Как сделать автоматическое назначение текущего пользователя в качестве автора при создании поста? Сейчас работает только если выбирать вручную автора публикации.
форма:
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_idThe 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 приложении была добавлена точно такая же функция вьюхи. Стоило её убрать и всё заработало. Поэтому и выдавало ошибку.