如何根据django ORM中的父表字段获取对象?

时间:2017-08-17 19:22:21

标签: django django-models django-orm

我有一个名为Profile的表,代码如下:

class Profile(models.Model):
    user = models.OneToOneField('auth_user', 
           related_name='profile', verbose_name='profile', on_delete=models.CASCADE)
    name = models.CharField(max_length=30, verbose_name='name')
    family = models.CharField(max_length=50, verbose_name='family')

,User表如下所示:

class User(models.Model):
    id = models.IntegerField(primary_key=True)
    username = models.CharField(max_lenght=255)
    password = models.CharField(max_lenght=255)

我想通过此功能获取包含用户名的个人资料:

def get_profile(request, username):
    # some codes

如何获取用户名的个人资料? 我应该在get_profile函数中写什么? 坦

1 个答案:

答案 0 :(得分:0)

您可以使用get()查询:

def get_profile(request, username=None):
    profile = Profile.objects.get(user__username=username)

但如果没有这样的用户,这可能会导致错误。因此,更好的方法是使用shortcuts.get_object_or_404()

from django.shortcuts import get_object_or_404


def get_profile(request, username=None):
    profile = get_object_or_404(Profile, user__username=username)

如果您对双下划线语法(user__username=username)感到困惑,请检查the docs for field lookups