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_addTrue。因此,无论您通过 admin UI 输入什么日期值,它最终都会被覆盖,这意味着没有理由显示该字段。在这种情况下,因为您无论如何都需要显示该字段,所以添加 readonly_fields 就可以了。

希望对您有所帮助!