2016-05-11 11 views
0

私は3つのモデルがあります:ユーザー、選択、カード。各ユーザーは同じ10枚のカードを見て、それぞれのカードが重要かどうかを判断します。私はクラスとその関係を定義する方法をここで'.....'オブジェクトはdjangoで反復できません

models.pyで

class Choice(models.Model): 
    user = models.ForeignKey(User) 
    card = models.ManyToManyField(Card) 
    is_important = models.NullBooleanField() 

class Card(models.Model): 
    card_number = models.IntegerField(primary_key=True) 
    content = models.TextField(null=False) 

でviews.py

(私はからのカードの選択を保存しようユーザーが。)

def listings(request): 
    user = request.user 
    choice = Choice.objects.create(user=user, is_important = True) 
    choice.card= Card.objects.get(1) 

しかし、私はこのエラーを得た

'Card' object is not iterable 

エラーの場所を教えてください。

多くの感謝! Card.objects.get(pk=1)

第二に、Choice.cards項目のリストと、特にないものを期待するのManyToManyFieldである:あなたが.get()最初の引数でpk=を忘れるよう

+0

'Card.object s.get(1) 'は有効なdjango構文ではありません。何をしようとしていますか? –

+0

代わりに 'choice.card = Card.objects.get(card_number = your_number)'を使うのですか? –

+0

また、正しく書かれていれば、多くの人ではなく、1台の車のオブジェクトが返されます。 – fips

答えて

1

のような多くの分野に多くに対して、オブジェクトを追加することができます。

def listings(request): 
    user = request.user 
    choice = Choice.objects.create(user=user, is_important = True) 
    choice.card= Card.objects.get(1) 

を次の行には、カードオブジェクトを取得しようとしています。しかし、取り出すカードを指定する必要があります。 IDを使用している場合など、それを照会:idのリストを使用して、他の

choice.card= Card.objects.get(pk=1) 

か:

choice.card= Card.objects.get(card_number=1) 

か、他card_numbersのリストを使用して:

choice.card = Card.objects.filter(pk__in=[12,22]) 

card_numberフィールドを使用している場合:

choice.card = Card.objects.filter(card_number__in=[12,22]) 
2

まず、それが見えます。あなたはそれを介して設定する必要があります

choice.card.set(Card.objects.filter(pk=1)) 

=will be deprecated from Django 1.10 and deleted in Django 2.0

.filter()との直接assignementが(反復可能である)クエリセットを返すことに注意してください。 M2Mフィールドの代わりにForeignKeyが必要だったと思います。その場合は、コードが動作します(追加番号pk=)。

3

あなたの機能で、この

card = Card.objects.create(card_number=any_number, content='abc') 
choice.card.add(card) 
関連する問題