django - 管理员中缺少字段

django - Missing fields in the admin

我正在尝试在管理员中获取 pub_dateupdate 选项。但是没有这样的事情。在管理员中,只有 usernamepasswordclient ip 字段。我错过了什么?非常感谢您的帮助。谢谢。

型号:

class Member(models.Model):
    username = models.CharField(max_length=150)
    password = models.CharField(max_length=150)
    pub_date = models.DateTimeField(auto_now_add=True, auto_now=False)
    update = models.DateTimeField(auto_now_add=False, auto_now=True)

    def __unicode__(self):
        return self.username


class IP(models.Model):
    client_ip = models.CharField(max_length=50)
    pub_date = models.DateTimeField(auto_now_add=True, auto_now=False)
    update = models.DateTimeField(auto_now_add=False, auto_now=True)

更新:

from django.contrib import admin
from models import Member, IP
# Register your models here.

admin.site.register(Member)
admin.site.register(IP)

@Selcuk 是对的,编辑自动字段没有太大意义,所以 django 从管理员那里排除了带有 auto_now* 参数的日期时间字段。

如果您真的想在管理员中看到这些字段,那么您必须更改模型以模仿 auto_now* 行为:

from django.utils import timezone

class Member(models.Model):

    username = models.CharField(max_length=150)
    password = models.CharField(max_length=150)
    pub_date = models.DateTimeField(default=timezone.now)
    update = models.DateTimeField(default=timezone.now)

    def save(self, *args, **kwargs):
        if self.pk is None:
            self.pub_date = timezone.now()
        else:
            kwargs['update_fields'] = ['username', 'password', 'update']
        self.update = timezone.now()
        return super(Member, self).save(*args, **kwargs)

但请注意,如果您尝试编辑字段,您的更改将被忽略。

这是只读字段,因此在 Django Admin 中默认被忽略。要显示它,您必须定义自定义 ModelAdmin class 并在 fields 属性中指定它。

from django.contrib import admin
from models import Member, IP

class MemberAdmin(admin.ModelAdmin):
    fields = ('username', 'password', 'pub_date', 'update')

class IPAdmin(admin.ModelAdmin):
    fields = ('client_ip', 'pub_date', 'update')

admin.site.register(Member, MemberAdmin)
admin.site.register(IP, IPAdmin)

您可以使用 fieldsets 而不是 fields 来显示更多部分的字段 (click)。

我不知道是否有任何选项不需要指定要显示的所有字段。

PS:您可以省略 auto_now_add = Falseauto_now = False,因为它们默认设置为 False