2017-11-20 4 views
1

"UserBookmark"テーブルの列に値 "tag"が属するデータをフェッチしようとしています。タグモデルを使用してManytoMany関係を作成する

UserBookmark.objects.filter(tag__in = ['Java','Android']) 

が、私は私は私のモデルを変更したテーブルで、このクエリに一致するデータ

<QuerySet [<UserBookmark: 21 user12 http://careers.bankofamerica.com/ [u'Java']>,<UserBookmark: 22 user12 http://aehlke.github.io/tag-it/examples.html [u'Data Science,Python']>,<UserBookmark: 23 user13 https://github.com/Azure/azure-quickstart-templates [u'Android']>, <UserBookmark: 24 user14 https://github.com/sunnykrGupta/Bigquery-series [u'Python']>, <UserBookmark: 25 user14 https://github.com/ctfs/write-ups-2017 [u'Data Analytics']>]> 

models.py

class UserBookmark(models.Model): 
    user = models.ForeignKey(User) 
    bookmark = models.URLField() 
    tag = models.CharField(max_length = 100) 

    def __str__(self): 
     return '%i %s %s %s'%(self.id,self.user,self.bookmark,self.tag) 

を持っていないのに対し、これはクエリセット[](空集合)を返します。 py

class UserBookmark(models.Model):

user = models.ForeignKey(User) 
bookmark = models.URLField() 
tags = models.ManyToManyField('Tag',blank=True) 

def __str__(self): 
    return '%i %s %s'%(self.id,self.user,self.bookmark) 

クラスタグ(models.Model):

名= models.CharField(max_lengthを= 100、ユニーク=真)

しかし、私は、Pythonのmanagepyのmakemigrations後に移行manae.pyのpythonを実行すると、I

ValueError:フィールドbookmark.UserBookmark.tagsをbookmark.UserBookmark.tagsに変更することはできません.UserBookmark.tags - 互換性のあるタイプではありません(M2Mフィールドを変更することも、M2Mフィールドを変更することもできません)

ここで何が間違っていますか?

+0

モデルを表示できますか? –

+0

@ClémentDenoixはい質問にmodels.pyを追加しました。 –

答えて

0

は多分問題があなたのクエリではありませんが、方法で、あなたのデータを格納しているtags__in

+0

をチェックしてください。フィールド名がタグでありタグではないので、うまくいきません。 –

+0

あなたのmodels.pyファイルを投稿することができます –

+0

はい私は質問に追加しました。 –

3

を使用して、複数形にしてください。あなたは単一のCharFieldを持っています。リストを文字列に変換するだけで、CharFieldを作成しているようです。したがって、あなたのレコードには、例えばリテラル文字列"[u'Data Science,Python']"が含まれています。

この種類のタグを保存する場合は、タグを別々に保存する必要があります。これを行う1つの方法は、別々のタグ・モデルを設定し、多対多の関係を使用することです。これを行うさまざまなサードパーティのパッケージがあります。その一例はdjango-taggitです。

+0

これを調べます。ありがとう:) –

+0

また、 'postgreSQL'をデータベースとして使用する場合、' ArrayField'を使うことができます:https://docs.djangoproject.com/en/1.11/ref/contrib/postgres/fields /#arrayfield –

+0

@ClémentDenoixいいえ私はSqliteを使用しています –

関連する問題