Search code examples
djangodjango-modelsdjango-viewsdjango-admindjango-users

Django - how to set user create article is by user is logon


class Article(models.Model):
    slidenumber = models.AutoField(primary_key=True)
    title = models.CharField(max_length=255)
    category = models.CharField(default='', max_length=30)
    description = models.TextField(default="")
    timeupdate = models.DateTimeField('Date Published')
    author = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE, editable=False, default=1)

If I set author field has default=1, when I login django admin page to create a article it will alway get author is my superuser (has ID =1), so How I can set if I login admin django page to create article by other user(not my superuser), the author field will get user is logon current.


Solution

  • Well, I don't know where did you create Article in admin page or in view.

    1. If you create article in django-admin just rewrite .save() method and set author.

    This code will work:

    class Article(admin.ModelAdmin):
      def save_model(self, request, obj, form, change):
         obj.author = request.user
         super(Article, self).save_model(request, obj, form, change)
    
    1. If you create article in view just rewrite post() method logic and set author as above