How to auto insert the current user when creating an object in django admin?

前端 未结 5 2093
别跟我提以往
别跟我提以往 2020-12-08 01:08

I have a database of articles with a

submitter = models.ForeignKey(User, editable=False)

Where User is imported as follows: <

5条回答
  •  星月不相逢
    2020-12-08 01:34

    It's time for a better solution override get_form method

    lets say way have this model

    models.py

    from django.db import models
    from django.contrib.auth.models import User
    
    
    class Post(models.Model):
        title = models.CharField(max_length=256)
        content = models.TextField()
        author = models.ForeignKey(User, on_delete=models.CASCADE)
    
    
        def __str__(self):
            return self.title
    

    admin.py

    class PostAdmin(admin.ModelAdmin):
        # you should prevent author field to be manipulated 
        readonly_fields = ['author']
    
        def get_form(self, request, obj=None, **kwargs):
            # here insert/fill the current user name or id from request
            Post.author = request.user
            return super().get_form(request, obj, **kwargs)
    
    
        def save_model(self, request, obj, form, change):
            obj.author = request.user
            obj.author_id = request.user.id
            obj.last_modified_by = request.user
            obj.save()
    

    admin.site.register(Post, PostAdmin)

提交回复
热议问题