django 所有字段都没有出现在管理表单中
django all fields not appearing in admin form
我在 django 中有以下模型:
class ProjectScheme(models.Model):
name = models.CharField(max_length=250, blank=False,null=False)
parent_scheme_id = models.ForeignKey(ProjectSchemeMaster, on_delete = models.CASCADE)
rule = models.TextField(blank=True)
created_on = models.DateTimeField(auto_now=False, auto_now_add=True)
created_by = models.IntegerField(blank=True,null=True)
updated_on = models.DateTimeField(auto_now=True, auto_now_add=False)
updated_by = models.IntegerField(blank=True,null=True)
def __str__(self):
return str(self.name)
并且在admin.py
# Register your models here.
class ProjectSchemeAdmin(admin.ModelAdmin):
exclude = ('id',)
class Meta:
model = ProjectScheme
admin.site.register(ProjectScheme, ProjectSchemeAdmin)
但是 date fields: updated_on, created_on
没有出现在 admin form
上。
我也试过没有 ProjectSchemeAdmin
class,还有:
class ProjectSchemeAdmin(admin.ModelAdmin):
pass
此外,
# list_display = [field.name for field in ProjectScheme._meta.fields if field.name != "id"]
list_display = ["id", "name","parent_scheme_id","rule","created_on", "created_by","updated_on","updated_by"]
但是一样。
我需要获取管理表单中的所有字段。
您需要添加readonly_fields = ('created_on','updated_on')
来显示日期字段。
# Register your models here.
class ProjectSchemeAdmin(admin.ModelAdmin):
list_display = ["name","parent_scheme_id","rule","created_on", "created_by","updated_on","updated_by"]
readonly_fields = ('created_on','updated_on')
class Meta:
model = ProjectScheme
admin.site.register(ProjectScheme, ProjectSchemeAdmin)
如docs所述:
As currently implemented, setting auto_now or auto_now_add to True will cause the field to have editable=False and blank=True set.
值 auto_now_add
是 True
。因此,无论您通过 admin UI 输入什么日期值,它最终都会被覆盖,这意味着没有理由显示该字段。在这种情况下,因为您无论如何都需要显示该字段,所以添加 readonly_fields
就可以了。
希望对您有所帮助!
我在 django 中有以下模型:
class ProjectScheme(models.Model):
name = models.CharField(max_length=250, blank=False,null=False)
parent_scheme_id = models.ForeignKey(ProjectSchemeMaster, on_delete = models.CASCADE)
rule = models.TextField(blank=True)
created_on = models.DateTimeField(auto_now=False, auto_now_add=True)
created_by = models.IntegerField(blank=True,null=True)
updated_on = models.DateTimeField(auto_now=True, auto_now_add=False)
updated_by = models.IntegerField(blank=True,null=True)
def __str__(self):
return str(self.name)
并且在admin.py
# Register your models here.
class ProjectSchemeAdmin(admin.ModelAdmin):
exclude = ('id',)
class Meta:
model = ProjectScheme
admin.site.register(ProjectScheme, ProjectSchemeAdmin)
但是 date fields: updated_on, created_on
没有出现在 admin form
上。
我也试过没有 ProjectSchemeAdmin
class,还有:
class ProjectSchemeAdmin(admin.ModelAdmin):
pass
此外,
# list_display = [field.name for field in ProjectScheme._meta.fields if field.name != "id"]
list_display = ["id", "name","parent_scheme_id","rule","created_on", "created_by","updated_on","updated_by"]
但是一样。
我需要获取管理表单中的所有字段。
您需要添加readonly_fields = ('created_on','updated_on')
来显示日期字段。
# Register your models here.
class ProjectSchemeAdmin(admin.ModelAdmin):
list_display = ["name","parent_scheme_id","rule","created_on", "created_by","updated_on","updated_by"]
readonly_fields = ('created_on','updated_on')
class Meta:
model = ProjectScheme
admin.site.register(ProjectScheme, ProjectSchemeAdmin)
如docs所述:
As currently implemented, setting auto_now or auto_now_add to True will cause the field to have editable=False and blank=True set.
值 auto_now_add
是 True
。因此,无论您通过 admin UI 输入什么日期值,它最终都会被覆盖,这意味着没有理由显示该字段。在这种情况下,因为您无论如何都需要显示该字段,所以添加 readonly_fields
就可以了。
希望对您有所帮助!