Django用户配置文件中的自定义列

时间:2017-06-27 16:54:35

标签: python django

我想在用户(<?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。有什么想法吗?

1 个答案:

答案 0 :(得分:4)

您有一个拼写错误:list_diplsay应为list_display。您还应该在列表值中添加一个尾随逗号:('birthday',)。这可以确保您最终得到元组而不是单个值。

修改

由于birthday字段不属于User,您必须添加一种方法在管理类中查找:

class CustomUser(UserAdmin):
    list_display = ('birthday',)

    def birthday(self, obj):
        return obj.profile.birthday

(我只展示了管理类的相关部分;您现有的inlines等应该保留。)