Tôi đã đơn giản hóa các mô hình của mình xuống để làm cho nó rõ ràng hơn những gì tôi đang cố gắng làm.Django: Truy cập nhiều đối tượng Nhiều thông qua mối quan hệ Nhiều đến Nhiều
(models.py trong ứng dụng của Đội)
from django.db import models
from django.contrib.auth.models import User
import datetime
class Team(models.Model):
users = models.ManyToManyField(User)
team_title = models.CharField(max_length=200)
team_description = models.CharField(max_length=200)
def __unicode__(self):
return self.team_title
(models.py trong Tài liệu ứng dụng)
from django.db import models
import datetime
class Document(models.Model):
teams = models.ManyToManyField("Teams.Team", blank=True)
document_title = models.CharField(max_length=200)
document_description = models.TextField()
def __unicode__(self):
return self.document_title
Những gì tôi muốn đạt được là nhận được một danh sách người dùng đã được gắn liền với một tài liệu bằng cách đầu tiên nhận được tất cả các đội liên kết với tài liệu và sau đó từ việc này nhận được tất cả những người dùng liên kết với các đội đó.
nỗ lực của tôi cho đến nay đã đi một cái gì đó giống như
(view.py trong Tài liệu ứng dụng) này
from django.contrib.auth.models import User
from Documents.models import *
from Teams.models import *
def docUsers(request, doc_id):
current_document = Documents.objects.get(pk = doc_id)
associated_users = current_document.teams.all().users
....
Lỗi: đối tượng 'QuerySet' không có thuộc tính của người sử dụng '
associated_users = current_document.items.all().users.all()
Lỗi: đối tượng 'QuerySet' không có thuộc tính 'người dùng'
associated_users = current_document.items.users.all()
Lỗi: đối tượng 'ManyRelatedManager' không có thuộc tính của người sử dụng '
Tôi đi về việc này một cách sai lầm?
Tôi vẫn còn bối rối. các mô hình Nhóm liên kết với mô hình Tài liệu là từ các tài liệu đến nhóm chứ không phải theo cách khác, (Tôi biết đây không phải là cách tiếp cận hợp lý nhất, nhưng tôi không được phép thay đổi cấu trúc mô hình), vậy làm cách nào tôi có thể lọc team__documents? – Finglish
@agf 1. Không, bạn sử dụng tên mẫu thực tế bên trong biểu thức lọc. 2. Không, bạn sử dụng = để tìm kiếm một phần tử duy nhất trong mối quan hệ M2M/FK. Xem [tra cứu mở rộng mối quan hệ] (https://docs.djangoproject.com/en/1.3/topics/db/queries/#lookups-that-span-relationships). –
@Finglish bạn có thể truy cập các mối quan hệ từ cả hai phía. Xem liên kết tôi đã cho agf. –