【问题标题】:Fetch data from models related with foreign key从与外键相关的模型中获取数据
【发布时间】:2014-03-13 06:09:25
【问题描述】:

我有一个与User model 和Foreign key 相关的模型:

class UserProfile(models.Model):
    user        = models.ForeignKey(User)
    gender      = models.CharField(max_length=10)
    credits     = models.IntegerField()
    ...

现在我想获取用户数据,为此我这样做了:

profile = user.userprofile_set.select_related()

现在从配置文件变量中,我拥有 UserProfile 模型中但不来自 User 模型的所有数据例如, 我有 gender , credits 等但不是 user email, name 等来自User 模型。但是我想要所有与用户相关的信息,我知道request 参数将有User instance 但稍后我可能会遇到与外键相关的其他模型同样的问题。

所以请让我知道以最合适的方式获取与Foreign key 相关的User 数据的最佳方式。

谢谢

【问题讨论】:

    标签: python django django-models django-views


    【解决方案1】:

    当你使用这个时:

    profile = UserProfile.objects.select_related('user').get(pk = <pk of userprofile instance>)
    

    当您像这样从user 表中获取数据时,它不会执行第二次查询:

    print profile.user.email ## Won't execute second query
    

    现在您可以使用model_to_dict获取所有或特定字段

    from django.forms.models import model_to_dict
    print model_to_dict(profile.user, fields=[], exclude=[]) ## All information of user relation.
    

    【讨论】:

    • 它给出了错误 'QuerySet' object has no attribute '_meta' ,我认为这是因为 model_to_dict() 需要对象并且 profile 不是对象,所以 select_related 不能与 get() 一起使用,我需要获取配置文件以供特定使用,如果我使用 filter() 来获取相同的错误。
    • 我认为你可以使用 select_related 和 get() 。 docs.djangoproject.com/en/dev/ref/models/querysets/…
    • 是的,在 select_related() 之后不是之前,我的错误
    • 另外,我认为我可以在没有 model_to_dict() 的情况下访问用户信息,例如“profile”为我提供了 UserProfile 模型的数据,而“profile.user”为我提供了用户模型数据。
    • 非常感谢您的帮助:)
    猜你喜欢
    • 2012-05-07
    • 2021-10-07
    • 2023-03-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-22
    • 2020-02-13
    • 1970-01-01
    相关资源
    最近更新 更多