首页 文章

使用Tag模型创建ManytoMany关系

提问于
浏览
1

我试图从“UserBookmark”表中获取列值“tag”属于列表的数据 .

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

但这会返回QuerySet [](null set),而我确实在表中有与此查询匹配的数据

<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)

我修改了我的models.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)

class Tag(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领域的删除)

我在这做错了什么?

2 回答

  • 3

    问题不在您的查询中,而在于您存储数据的方式 . 你有一个CharField,你似乎只是通过将列表转换为字符串来填充它 . 所以你的记录包含例如文字字符串 "[u'Data Science,Python']" .

    如果要存储此类标记,则需要单独存储标记 . 一种方法是设置单独的Tag模型并使用多对多关系 . 有各种第三方包为您执行此操作 - 一个示例是django-taggit .

  • 0

    尝试复数,也许使用 tags__in

相关问题