django multiple related_name()搜索过滤器

时间:2011-10-04 21:25:12

标签: django

我有个人资料。

class UserProfile(models.Model):
    user = models.ForeignKey(User, related_name="%(class)s", unique=True)
    providers = models.ManyToManyField(ServiceProvider, related_name="%(class)s")

class ServiceProvider(models.Model):
    name = models.CharField(max_length=200, null=False, default="ims")  

如何使用配置文件对象访问用户对象。 我可以这样做:(假设我有我的服务提供者对象)

provider.userprofile.user.get() // or something like that.

我想在一个SQL查询中执行此操作。因此,如果我只有提供者的pk,那么访问用户配置文件和/或拥有该提供者的用户将会很棒。

1 个答案:

答案 0 :(得分:0)

由于您的用户只是外键,因此您需要的只是provider.userprofile.user

如果您不希望发生第二次SQL查询,则可以在选择个人资料时使用select_related选项,例如:

UserProfile.objects.get(pk=<the_id>,select_related=True)

正如所写,您的模型不提供从提供者到用户的简单方法,因为从ServiceProviderUserProfile有一个ManyToMany。您必须获取与提供商关联的UserProfile集合,获取所需的集合,然后按上述方式继续获取用户。