Как сделать автоматическое назначение текущего пользователя в качестве автора при создании поста?
форма:
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