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

Viewed 77
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.

3 Answers

The default value for the logged used can be achieved by


{{request.user}}


This returns the currently logged-on user. In your views, create a default value with a function like this

def get_initial():      
    return {request.user}

When creating the form,

user=forms.ModelChoiceField(
    widget=forms.HiddenInput,
    queryset=get_user_model().objects.all(),        
    disabled=True,  

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
    def save_model(self, request, obj, form, change):
        obj.author = request.user
        super().save_model(request, obj, form, change)

It work fine.

Related