Django Model Admin:如何自动分配和隐藏当前用户的 created_by 字段并在保存后显示?

Django Model Admin: How to auto assign and hide created_by field with current user and display after save?

我正在处理由以下模型属性组成的某些模型会计。

class Accounting(model.Model):
    booking = models.OneToOneField(Booking, on_delete=models.PROTECT, null=True)
    description = models.CharField(max_length=100, validators=[])
    created_by = models.ForeignKey(User, on_delete=models.PROTECT)
    bus_company = models.ForeignKey(BusCompany, models.PROTECT)

在admin.py我已经做了

@admin.register(Accounting)
class AccountingAdmin(ModelAdmin):
      list_display =(
        'bus_company',
        'description ',
        'bus_company ',
    )
   

现在当我使用 Django admin 添加时 Accounting。我想隐藏 created_by 并想将当前登录用户设置为 created_by。目前是 superuser 所以在添加数据后 created_by 字段也会更新并显示 我该怎么做?

要隐藏字段,请将 editable 设置为 False

created_by = models.Model(editable=False)

现在,也将 blank=True 添加到 created_by 并覆盖保存方法:

created_by = models.Model(blank=True,null=True,editable=False)
def save(self,user,*args,**kwargs):
    user = user
    super().save(*args,**kwargs)

保存此对象时:

def view_name(request):
    user = request.user
    atributes = {'booking':'blabl','description':'blablablab'
    ,'bus_company':'blab blab'}
    account = Account(**atributes)
    account.save(user=user)
    

我在管理中添加了 read_only 个字段

@admin.register(Accounting)
class AccountingAdmin(ModelAdmin):
      list_display =(
        'bus_company',
        'description ',
        'bus_company ',
    )
    readonly_fields = (
        'created_by',

    )

    def save_model(self, request, obj, form, change):
        if not change:
            obj.created_by = request.user
        obj.save()