Django admin model field set to current user

后端 未结 2 1649
佛祖请我去吃肉
佛祖请我去吃肉 2020-12-20 02:00

I have a model with field:

class MyModel(models.Model):
    name = models.CharField(max_length=50)
    created_by = models.ForeignKeyField(User)
相关标签:
2条回答
  • 2020-12-20 02:45

    To do that override the save_model method and set the created_by field to the current user.

    class MyModelAdmin(admin.ModelAdmin):
        list_display= ("name",)
        fields = ("name",)
    
        def save_model(self, request, obj, form, change):             
            if not change: 
            # can use this condition also to set 'created_by'    
            # if not getattr(obj, 'created_by', None):            
                obj.created_by = request.user
            obj.save()
    
    0 讨论(0)
  • 2020-12-20 02:52

    You have already set fields so that created_by does not appear in form in the Django admin.

    Now you need to override save_model, and set the user before saving new objects.

    class MyModelAdmin(admin.ModelAdmin):
        fields = ("name",)
    
        def save_model(self, request, obj, form, change):
            if not change:
                # the object is being created, so set the user
                obj.created_by = request.user
            obj.save()
    
    0 讨论(0)
提交回复
热议问题