关于django:使用Tag模型创建ManytoMany关系

Using Tag model to create ManytoMany relationship

我试图从"userbookmark"表中获取列值"tag"所属列表的数据。

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

但这将返回query set[](空集),而我在表中有与此查询匹配的数据

1
<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']>]>

型号.py

1
2
3
4
5
6
7
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

类用户书签(models.model):

1
2
3
4
5
6
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):

name=models.charfield(max_length=100,unique=true)

但是,当我在python managepy makemigrations之后运行python manae.py migrate时,会得到以下错误:

ValueError:无法将字段bookmark.userbookmark.tags更改为bookmark.userbookmark.tags-它们不兼容类型(不能更改为M2M字段或从M2M字段中更改,也不能在M2M字段上通过=添加或删除)

我在这里做错什么了?


问题不在于你的问题,而在于你的数据。你有一个单一的字段,你似乎只是把一个字段转换成一个字符串。因此,你的记录包含以文学字符串为例。

如果你想保存这类标记,你需要保存标记的分隔。这样做的一个方法是建立一个分开的标记模型,并使用多种关系。有各种各样的第三方包装,为你做这件事——一个例子是Django-Taggit。


尝试多元化,也许使用tags__in