django - 管理员中缺少字段
django - Missing fields in the admin
我正在尝试在管理员中获取 pub_date
和 update
选项。但是没有这样的事情。在管理员中,只有 username
、password
和 client 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 = False
和 auto_now = False
,因为它们默认设置为 False
。
我正在尝试在管理员中获取 pub_date
和 update
选项。但是没有这样的事情。在管理员中,只有 username
、password
和 client 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 = False
和 auto_now = False
,因为它们默认设置为 False
。