2011-10-04 53 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,得到你想要的,然後繼續按照上面的方式獲取用戶。