2011-05-12 66 views
0

我有兩個Django模型之間的許多一對多的關係:在我的模板檢查如果兩個模式屬於多到許多關係

from django.contrib.auth.models import User 
class UserProfile(models.Model): 
    user = models.OneToOneField(User) 
    ... 
    bees = models.ManyToManyField('Bee') 
class Bee(models.Model): 
    ... 

,我想有根據不同的輸出用戶是否擁有某些蜜蜂。我在做什麼,現在是創造,它類似的東西這個自定義過濾器:

@register.filter 
def my_filter(user, bee): 
    userprofile = user.get_profile() 
    return bee in userprofile.bees.all() 

和模板,我可以用它作爲這樣的:

{% for bee in bees %} 
    {% if user|my_filter:bee %} 
     I am in {{ bee }} 
    {% else %} 
     I am not in {{ bee }} 
    {% endif %} 
{% endfor %} 

但這似乎hackish的自1)我叫.all() - 加載所有蜜蜂,包括我不感興趣的蜜蜂 - 沒有使用結果,2)我不認爲我需要創建一個自定義過濾器,因爲這應該是相當普遍

什麼是正確的方法來檢查模型是否屬於多對多關係與另一個模型?

+0

什麼是「蜜蜂」應該是在你的過濾器?我猜,與「蜜蜂」有關的「蜜蜂」是什麼? – 2011-05-12 21:53:48

+0

@Bryce Siedschlaw:蜜蜂是蜜蜂的一種複數(我通常對容器(例如列表,字典)或數據庫表使用複數名稱,對非容器或數據庫行使用單數名稱,另外,我還添加了一些更正這個問題不那麼令人困惑(我在早上4點寫信道歉)。 – 2011-05-13 10:12:22

回答

1

您可以在您的視圖中獲取用戶的蜜蜂標識列表。事情是這樣的:

def view(request): 
    user_bee_ids = request.user.bees.all().values_list('pk', flat=True) 

然後在你的模板,你可以這樣做:

{% if bee.pk in user_bee_ids %} 
    I am in {{ bee }} 
{% else %} 
    I am not in {{ bee }} 
{% endif %} 
2

如果你想檢查你的模板,你可以看看in operator

{% if special_bee in profile_instance.bees.all %} 
    This profile is related to this special bee. 
{% endif %}