2017-05-15 4 views
0

同じモデル内でselfにM2M値を作成しようとしています。私はnameフィールドをうまく更新できます。しかし、M2M(スーパータグ)フィールドを更新すると、私はTypeErrorを取得し続けます。django付き自己M2M

models.py

class Tag(models.Model): 
    name = models.CharField("Name", max_length=5000, blank=True) 
    supertag = models.ManyToManyField('self', blank=True) 

serializers.py

エラー
 supe = tag.all() 
     print(supe) 
     # returns [<Tag: XYZ>, <Tag: 123>] 
     for y in supe: 
      # import pdb; pdb.set_trace() 
      tag = Tag.objects.update(supertag__pk=y.pk) 
     tag.save() 

TypeError: 'supertag__pk' is an invalid keyword argument for this function 

私はまたちょうど

答えて

0

supe同じエラーを与えtag = Tag.objects.update(supertag=supe)を試みでありますキューrysetには、pk属性はありません。

また、異なる変数に同じ名前を使用しています。タグはすでに割り当てられています。

supe = tag.all() 

タグを新しいオブジェクトに割り当てると、以前のタグ変数に基づいたforループの動作に影響します。

tag = Tag.objects.get_or_create(supertag__pk=supe.pk) 

これはできません。

EDIT

機能get_or_createが実際タプルを返し、オブジェクトとブーリアンフラグ。 booleanフラグは、オブジェクトが作成されたかどうかを指定します。 したがって、実装していたロジックが間違っていました。私たちは、

を議論したように、このような何か、 `item.saveを(追加

for x in supe: 
    if x.taglevel == 1: 
     for value in supe: 
      x.tag.add(value) 
      x.save() 
    else: 
     #your next logic 
     print("No level 1") 
+0

を行うことができます)'助けにはなりませんでした。 'supertag__pk'がこの関数の無効なキーワード引数であることを前の行で示しています。 – Ycon

+0

これは' '無関係と外部キーのみが許可されているというエラーを' '.save()' 'を使って返します。 – Ycon

+0

tag.all()のタグ変数は何ですか?それを私に見せてくれますか? – zaidfazil

関連する問題