如何在django中链接两个表?

时间:2017-10-10 13:41:18

标签: python django

我在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查询后返回所有我想要的内容

2 个答案:

答案 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