我想在用户(<?php
// db connection
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$a_value_or_id_to_update = $_POST["a_value_or_id_to_update"];
// Query to update db here
}
?>
)部分的Django管理员中添加自定义列。
models.py
/auth/user/
在 admin.py 中,我有以下代码:
from django.db import models
from django.contrib.auth.models import User
from django.db.models.signals import post_save
from django.dispatch import receiver
class Profile(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
birthday = models.DateField()
def __str__(self):
return self.user.username
@receiver(post_save, sender=User)
def create_user_profile(sender, instance, created, **kwargs):
if created:
Profile.objects.create(user=instance)
@receiver(post_save, sender=User)
def save_user_profile(sender, instance, **kwargs):
instance.profile.save()
我在这里读到from django.contrib import admin
from django.contrib.auth.admin import UserAdmin
from django.contrib.auth.models import User
class ProfileInline(admin.StackedInline):
model = Profile
can_delete = False
verbose_name_plural = 'Custom fields'
class CustomUser(UserAdmin):
inlines = (ProfileInline, )
list_diplsay = ('birthday')
def get_inline_instances(self, request, obj=None):
if not obj:
return list()
return super(CustomUser, self).get_inline_instances(request, obj)
admin.site.unregister(User)
admin.site.register(User, CustomUser)
应该完成所有工作,但就我而言,它不起作用。我没有看到管理面板中的任何更改,因为我已添加该行。
问题出在哪里?谢谢!
修改:通过list_display
更改list_diplsay
来解决问题。现在我明白了:list_display
。有什么想法吗?
答案 0 :(得分:4)
您有一个拼写错误:list_diplsay
应为list_display
。您还应该在列表值中添加一个尾随逗号:('birthday',)
。这可以确保您最终得到元组而不是单个值。
修改强>
由于birthday
字段不属于User
,您必须添加一种方法在管理类中查找:
class CustomUser(UserAdmin):
list_display = ('birthday',)
def birthday(self, obj):
return obj.profile.birthday
(我只展示了管理类的相关部分;您现有的inlines
等应该保留。)