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

В Django есть несколько способов автоматического присваивания авторства залогиненому пользователю при создании статьи. Ниже представлены два наиболее распространенных подхода.

1. Использование связи ForeignKey:
В Django можно использовать связь ForeignKey в модели статьи, чтобы указать на автора статьи. В этом случае каждый экземпляр статьи будет иметь поле, содержащее ссылку на автора. С помощью этой связи каждая статья будет привязана к определенному пользователю в приложении.

Например, в модели статьи (models.py) вы можете добавить поле ForeignKey, которое будет указывать на модель пользователя Django - User:

   from django.contrib.auth.models import User

   class Article(models.Model):
       title = models.CharField(max_length=255)
       content = models.TextField()
       author = models.ForeignKey(User, on_delete=models.CASCADE)
       created_at = models.DateTimeField(auto_now_add=True)

При создании статьи, вы должны получить текущего пользователя и автоматически присвоить его полю author. В Django доступ к текущему пользователю можно получить через объект request:

   from django.contrib.auth.decorators import login_required

   @login_required
   def create_article(request):
       if request.method == 'POST':
           form = ArticleForm(request.POST)
           if form.is_valid():
               article = form.save(commit=False)
               article.author = request.user
               article.save()
               return redirect('article_detail', article_id=article.id)
       else:
           form = ArticleForm()
       return render(request, 'create_article.html', {'form': form})

2. Использование сигналов:
Другой способ автоматического присваивания автора статьи - использование сигналов Django. Вы можете определить функцию-обработчик сигнала, которая будет вызываться перед сохранением экземпляра модели статьи. В этом обработчике вы можете установить автора статьи.

Например, вы можете создать файл signals.py со следующим содержимым:

   from django.db.models.signals import pre_save
   from django.dispatch import receiver
   from django.contrib.auth.models import User
   from .models import Article

   @receiver(pre_save, sender=Article)
   def set_article_author(sender, instance, **kwargs):
       if not instance.author:
           instance.author = User.objects.get(username='default')

Затем в файле apps.py вашего приложения Django вы должны зарегистрировать этот сигнал:

   from django.apps import AppConfig

   class MyAppConfig(AppConfig):
       default_auto_field = 'django.db.models.BigAutoField'
       name = 'my_app'

       def ready(self):
           import my_app.signals

После этого каждый раз перед сохранением экземпляра модели статьи, сигнал set_article_author будет вызываться и проверять, есть ли уже автор для статьи. Если статья не имеет автора, то в этом обработчике можно установить автора по умолчанию (в примере выше - пользователь с именем 'default').