通过 Django 管理员在 ManyToManyField 中添加值
我是 Django 的新手,所以你能帮我理解 save() 方法是如何工作的吗?
这是我的模型:
class Tag(models.Model):
name = models.CharField(verbose_name=u'Tag', max_length=200, unique=True)
class Entry(models.Model):
title = models.CharField(verbose_name=u'Entry title', max_length=200)
# some more fields here
tags_string = models.CharField(verbose_name=u'Tags', max_length=200, blank=True)
tags = models.ManyToManyField(Tag, blank=True)
有 tags_string
用户输入用逗号分隔的标签。它只是一个字符串。
然后我尝试通过单击 Django 管理中的“保存”来将标签添加到 ManyToManyField:
def save(self):
super(Entry, self).save()
if self.tags_string:
for tag in tags_string.split(","):
t = Tag.objects.create(name=tag)
self.tags.add(t)
但它不起作用。 entry.tags.add(t)
通过 Django shell 完美工作 - 它将值添加到数据库中。我认为我的 save() 方法有问题。
您能建议我如何修复它吗?
I'm a newbie in Django, so can you help me to understand how the save() method works?
Here's my models:
class Tag(models.Model):
name = models.CharField(verbose_name=u'Tag', max_length=200, unique=True)
class Entry(models.Model):
title = models.CharField(verbose_name=u'Entry title', max_length=200)
# some more fields here
tags_string = models.CharField(verbose_name=u'Tags', max_length=200, blank=True)
tags = models.ManyToManyField(Tag, blank=True)
There is tags_string
where user enters tags separated by comma. It's just a string.
Then I'm trying to add tags to ManyToManyField by clicking "Save" in Django admin:
def save(self):
super(Entry, self).save()
if self.tags_string:
for tag in tags_string.split(","):
t = Tag.objects.create(name=tag)
self.tags.add(t)
but it doesn't work. entry.tags.add(t)
works perfectly through the Django shell - it adds the values to the database. I think that something is wrong in my save() method.
Could you suggest me how to fix it, please?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
试试这个
try this
检查 M2M 标签格式并打印它们?
Check the M2M tags format and print those?
首先,
save
有您需要考虑的其他参数。其次,您应该使用get_or_create
而不是create
作为标记:这些可能无法解决当前问题,但最终会解决您的问题。
您可能还应该使用
django.template.defaultfilters< 中的
str.lower()
或title()
对标签进行某种标准化。 /代码>。否则,您最终会得到“Tag”、“tag”、“TAG”和“tAg”。First,
save
has additional parameters that you need to account for. Second, you should be usingget_or_create
instead ofcreate
for the tags:Those may not fix the current issue, but it would have got you eventually.
You should also probably be doing some sort of normalization on the tags as well, using
str.lower()
ortitle()
fromdjango.template.defaultfilters
. Otherwise, you'll end up with "Tag", "tag", "TAG" and "tAg".