我正在尝试从“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字段上添加或删除)
我在这里做错了什么?
答案 0 :(得分:3)
问题不在您的查询中,而在于您存储数据的方式。你有一个CharField,你似乎只是通过将列表转换为字符串来填充它。因此,您的记录包含例如文字字符串"[u'Data Science,Python']"
。
如果要存储此类标记,则需要单独存储标记。一种方法是设置单独的Tag模型并使用多对多关系。有各种第三方包为您执行此操作 - 一个示例是django-taggit。
答案 1 :(得分:0)
尝试复数,可能使用tags__in