我在django中使用内置的User
模型,但我想使用一些自定义字段,我创建了新模型
class Profile(models.Model):
user = models.OneToOneField(User)
profile_img = models.ImageField(null=True)
def __str__(self):
return self.user.username
这是我的自定义模型。 但是当我创建新用户时它不显示在admin(在配置文件表中),我需要从管理面板添加用户,添加后工作正常。我应该怎么做才能显示所有用户的个人资料信息?
P.S。当我创建表配置文件并尝试从连接表中选择信息时,sql查询没有返回任何内容,但在将现有用户添加到配置文件表sql查询后返回所有我想要的内容
答案 0 :(得分:1)
我不确定你想要什么......如果你想在管理员应用程序中管理个人资料,你必须注册它。
from django.contrib import admin
from myproject.myapp.models import Profile
class ProfileAdmin(admin.ModelAdmin):
pass
admin.site.register(Profile, ProfileAdmin)
编辑:您可以使用信号在创建用户时自动创建配置文件。
from django.contrib.auth.models import User
from django.db.models.signals import post_save
from myproject.myapp.models import Profile
@receiver(post_save, sender=User)
def create_profile(sender, instance **kwargs):
Profile.objects.create(user=instance)
请注意,有时使用信号可能难以维护。您也可以使用AbstractBaseUser。这是一个经典问题,在很多帖子中都有广泛报道。 一个我特别喜欢:https://simpleisbetterthancomplex.com/tutorial/2016/07/22/how-to-extend-django-user-model.html
答案 1 :(得分:1)
要在创建新用户时创建新的providers
对象,您可以使用Profile
:
pre_save receiver
from django.db.models.signals import post_save
from django.dispatch import receiver
@receiver(post_save, sender=User)
def create_user_profile(sender, instance, created, **kwargs):
if created:
Profile.objects.create(
user=instance
)
参数用于检查对象是否已创建(created
)或已更新(created=True
)