2017-01-07 1 views
1

왜 target_dialogue가 항상 None입니까?ManyToManyField에서 필터를 사용하여 개체를 얻는 방법

모델 :

class Dialogue(models.Model): 
    name = models.CharField(max_length=30, blank=True) 
    is_conference = models.BooleanField(default=False) 

    participants = models.ManyToManyField(
     Person, 
     related_name='dialogues', 
    ) 

    def __str__(self): 
     return self.name or str(self.pk) 

그리고 참가자 필드 2 객체에 포함 된 적절한 대화 싶어보기

- 사용자와 동반자. 그리고이 대화가 존재하지 않으면 나는 그것을 창조한다 :

 target_dialogue = None 
     try: 
      target_dialogue = Dialogue.objects.get(is_conference=False,participants__in=[user, companion]) 
     except ObjectDoesNotExist: 
      target_dialogue = Dialogue() 
      target_dialogue.save() 
      target_dialogue.participants.add(user) 
      target_dialogue.participants.add(companion) 
     finally: 
      return render(request, 'dialogues/dialogue.html', { 
       'dialogue': target_dialogue, 
      }) 

그러나 target_dialogue는 항상 없음. 그것의 이유는 무엇입니까? 나는 나쁜 필터 매개 변수에 db에서 대화를 얻기에있는 말썽 만 해결하기 위하여 가정되었다, 그러나 지금 나는 그것에 관하여 의혹이있다. 다른 뭔가?

답변

0

request.user은 Dialogue에 관계가있는 Person 모델의 대상이 아닙니다.

먼저 사람 개체를 가져올 수 있습니다

user = Person.objecs.get(user=request.user). # According to your person model 

는 동반자 다음 쿼리에 대한 동일 따르

target_dialogues = Dialogue.objects.filter(is_conference=False,participants__in=[user,companion] 
+0

예, 감사, 그것은 사실입니다. 그러나 어쨌든 문제는 해결되지 않습니다. target_dialogue가 None이라는 문제가 계속 발생합니다. 그러므로 그것 때문에 뿐만이 아닙니다. 질문에 코드를 추가하여 명확히합니다. –

+0

단순한 participants__in = [사용자, 동반자]가 아니라 참여자 _in = [사용자 및 동반자] –

+0

및 해당 부분은 http://stackoverflow.com/questions/8618068/django-filter-queryset-in-for-every를 참조하십시오. -item-in-list – maverick

관련 문제