many to many 관계의 항목 목록을 쿼리하는 데 문제가 있습니다. 쿼리하려는 모델은 아래와 같습니다. 이것은 근로자가 "오프닝"을 선택하고 많은 근로자가 동일한 "오프닝"을 선택할 수있는 모델입니다. "오프닝"을 선택한 근로자 목록을 선택하려고하는데 성공하지 못했습니다. 내가 선택한 근로자 (ID-31)에 따라 개방의 유형 아래이 시도하기 때문에Django manytomany 질의 중 없음 및/또는 불행을 표시합니다.
class FavOpening(models.Model):
opening = models.OneToOneField(Openings, blank=True, default=None)
worker = models.ManyToManyField(Worker, blank=True, default=None)
def __unicode__(self):
return str(self.opening)
그것은 매우 이상이며, 선택한 노동자가 인쇄 할 수있는 개방 작동합니다.
employee = get_object_or_404(Worker, id=31)
print employee.favopening_set.all()
하지만 아래의 방법을 사용하여 manytomany 내부에서 작업자를 얻으려면 다른 방법을 사용하면 작동하지 않습니다. Workers.Worker을 보여주는 - 그것은 내가 또한 개방 (ID = 1)하지만 난 어떤 결과를 얻기하지 오전에 따라 노동자의 목록을 가져올 수 아래하려고 노력
openingobj = get_object_or_404(Openings, id=1)
print openingobj.favopening_set.all()
속성 "favopening_set"을하지 않습니다 말한다. 나는 적어도 하나의 작업자가이 구멍을 선택해야하기 때문에 사실이 아니다 없음.
openingobj = get_object_or_404(Openings, id=1)
print openingobj.favopening.worker
마지막으로, 나는이이 아래를 얻기 위해 프리 페치를 사용하여 말한다 약간의 연구를 기반으로 시도 (나는 관리자에서 확인) 사물의 집합 - What's the difference between select_related and prefetch_related in Django ORM?,하지만 관리자는 오프닝 인스턴스를 통해 액세스 할 수 없다고 말합니다.
openingobj = get_object_or_404(Openings, id=1)
openingobj.objects.prefetch_related('favopening_set').all()
내가 어떻게 할 수 있는지에 대한 유용한 조언을 주셔서 감사합니다.
왜'favopening_set'을 사용하려했는지 알 수 없습니다. 그것은 일대일 관계입니다. 그것은 집합이 아닙니다. 올바른 접근자는 다음 코드 조각에서 올바르게 사용 된'favopening'입니다. –
안녕 다니엘, 나는 당신이 조언 한 것처럼 내가 사용자 favopening 때 개방과하지 노동자를 받고있다. 나는이 오프닝을 선택한 노동자 목록을 얻는 데 관리자가 필요하기 때문에 객체와 함께 favopening을 수행하려고 시도했지만 "인쇄 할 때 관리자가 FavOpening 인스턴스를 통해 액세스 할 수 없다"는 오류가 발생했습니다. dir (openingobj.favopening)은 객체가 사용할 수있는 속성 목록에 있음을 보여줍니다. – user3655574