使用Tag模型创建ManytoMany关系

时间:2017-11-20 15:41:29

标签: django many-to-many django-queryset

我正在尝试从“UserBookmark”表中获取列值“tag”属于列表的数据。

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

但是这会返回QuerySet [](null set),而我确实在表

中有匹配此查询的数据
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

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.py

类UserBookmark(models.Model):

AppDomain.CurrentDomain.ProcessExit

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字段更改,或在M2M字段上添加或删除)

我在这里做错了什么?

2 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:0)

尝试复数,可能使用tags__in