2010-09-02 37 views
14

tôi có các mô hình Django 1.2 sau:django queryset nhiều-nhiều lĩnh vực

class Category(models.Model): 
    name = models.CharField(max_length=255) 

class Article(models.Model): 
    title = models.CharField(max_length=10, unique=True) 
    categories = models.ManyToManyField(Category) 

class Preference(models.Model): 
    title = models.CharField(max_length=10, unique=True) 
    categories = models.ManyToManyField(Category) 

Làm thế nào tôi có thể thực hiện một truy vấn mà sẽ cho tôi tất cả các đối tượng Điều đó có liên quan đến bất kỳ các loại tương tự mà một đối tượng Preference đã cho có liên quan gì?

ví dụ: Nếu tôi có một đối tượng ưu tiên có liên quan đến các loại "cá", "mèo" và "chó", tôi muốn có một danh sách tất cả các Bài viết có liên quan đến "cá", "mèo" hoặc "chó".

Trả lời

17

Hãy thử:

preference = Preference.objects.get(**conditions) 
Article.objects.filter(categories__in = preference.categories.all()) 
+0

vâng, điều này hoạt động. – Roger

2
Article.objects.filter(categories__in=myPreferenceObject.categories.all()) 
+0

Bạn có kiểm tra mà ra? Tôi đã thử một cái gì đó tương tự và có một lỗi. –

+0

Tôi nhận được một TypeError: đối tượng 'ManyRelatedManager' không thể lặp lại – Roger

+0

Lỗi của tôi. Đã sửa. –

Các vấn đề liên quan