django все поля не отображаются в форме администратора - PullRequest
1 голос
/ 04 мая 2020

У меня есть следующая модель в 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. enter image description here

Я тоже пробовал без ProjectSchemeAdmin класса, а также:

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"]

Но тоже самое .

Мне нужно получить все поля в форме администратора.

1 Ответ

1 голос
/ 04 мая 2020

Для отображения поля даты необходимо добавить 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)

Как указано в документах :

В том виде, в котором оно реализовано в настоящее время, установка для auto_now или auto_now_add значения True приведет к тому, что для поля будет установлено значение editable = False и пусто = True.

Значение auto_now_add равно True. Поэтому независимо от того, какое значение даты вы вводите через интерфейс администратора, оно в конечном итоге будет переопределено, что означает отсутствие причин для отображения поля. В этом случае, так как вам все равно нужно отобразить поле, добавьте readonly_fields.

Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...