2011-10-08 57 views
0

我有這樣的模式:搜索與related_name Django的

class LifeGoals(models.Model): 
    name = models.CharField(max_length=200) 

class Interests(models.Model): 
    name = models.CharField(max_length=200) 

class Sports(models.Model): 
    name = models.CharField(max_length=200) 

class UserProfile(models.Model): 
    name = models.CharField(max_length=50) 
    life_goals = models.ManyToManyField(LifeGoals, related_name='user_life_goals') 
     # may be more than 1 choice 
    interests = models.ManyToManyField(Interests, related_name='user_interests') 
     # may be more than 1 choice 
    sports = models.ManyToManyField(Sports, related_name='user_sports') 
     # may be more than 1 choice 

如何編寫搜索過濾器DjangoORM爲(例如)這樣的查詢:提前

User that has some options in LifeGoals and some options in Interests and some options in Sports 

謝謝!

回答

5

我想你可以試試這個:

UserProfile.objects.filter(life_goals__name="goal_name", 
          interests__name="interests_name", 
          sports__name="sports_name") 

但是,一切都很好地說明如下:django doc on queries

+0

試圖這樣做,但出現錯誤:無法將關鍵字'user_life_goals'解析爲字段。選擇是:... –

+0

這是因爲該字段只是'life_goals'related_name指的是反向查找。 –

2

要指定你需要使用雙下劃線

這樣一個字段,其在相關模型life_goals_name應該是life_goals__name

這是你的問題:)