2017-01-07 11 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は常にNoneです。それの理由は何ですか?私はDBからの対話を得るためのトラブルだけを解決することになっていましたが、今は疑問があります。多分何か?

答えて

0

request.userは対話に関係がある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

また、単にparticipates__in = [user、companion]ではなくparticipators__in = [user and companion] –

+0

とその部分についてはhttp://stackoverflow.com/questions/8618068/django-filter-queryset-in-for-everyを参照してください。 -item-in-list – maverick

関連する問題