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()
我正在处理由以下模型属性组成的某些模型会计。
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()