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。
尝试多元化,也许使用