首页 > 解决方案 > Django Model Admin:如何使用当前用户自动分配和隐藏 created_by 字段并在保存后显示?

问题描述

我正在使用某些模型会计,其中包含以下模型属性。

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 管理员添加Accounting. 我想隐藏created_by并想将当前登录的用户设置为created_by. 目前superuser在添加数据后是这样 created_by 字段也得到更新并显示我该怎么做?

标签: pythondjangodjango-modelsdjango-admin

解决方案


要隐藏归档,请将 editable 设置为 False

created_by = models.Model(editable=False)

现在,还要将 blank=True 添加到 created_by 并覆盖 save 方法:

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)
    

推荐阅读