2011-10-04 68 views
0

我有个人资料。django multiple related_name()搜索过滤器

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,那么到达用户配置文件和/或持有该提供商的用户将是非常好的。

回答

0

因为你的用户仅仅是一个外键,所有你需要的是provider.userprofile.user

如果你不希望招致第二SQL查询,你可以选择你的个人资料时,喜欢使用select_related选项:

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

书面,你的模型没有提供一个简单的方式从供应商到用户拿到,因为是从ServiceProviderUserProfile一个多对多。你必须得到与提供者关联的一组UserProfile,得到你想要的,然后继续按照上面的方式获取用户。