如何在django admin中自动填充字段并使其只读



我希望created_by字段自动填写当前管理员的电子邮件谁登录,它应该是只读字段

我试过了:

admin.py

from django.contrib import admin
from support.models import Ticket
class TicketAdmin(admin.ModelAdmin):
def get_form(self, request, obj=None, **kwargs):
form = super().get_form(request, obj, **kwargs)
form.base_fields['created_by'].initial = request.user
return form
def save_model(self, request, obj, form, change):
if not obj.created_by:
obj.created_by = request.user
super().save_model(request, obj, form, change)

admin.site.register(Ticket, TicketAdmin)

我仍然可以编辑字段,并可以从下拉菜单中选择其他电子邮件地址

model.py

class Ticket(models.Model):

PRIORITY = (
("High", "high"),
("Medium", "medium"),
("Low", "low")
)
subject = models.CharField(max_length=255)
body = models.TextField()
priority = models.CharField(max_length=10,choices=PRIORITY)
created_by = models.ForeignKey(Users, on_delete=models.CASCADE)

我如何实现它?

您可以通过在ModelAdmin类中添加readonly_fields字段来实现这一点:

class TicketAdmin(admin.ModelAdmin):
readonly_fields = ['created_by']
def get_form(self, request, obj=None, **kwargs):
form = super().get_form(request, obj, **kwargs)
form.base_fields['created_by'].initial = request.user
return form
def save_model(self, request, obj, form, change):
if not obj.created_by:
obj.created_by = request.user
super().save_model(request, obj, form, change)