【发布时间】:2012-01-04 15:30:45
【问题描述】:
我是 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() 方法有问题。
您能建议我如何解决它吗?
【问题讨论】:
-
你在哪里填写
self.tags_string? -
在 django 管理员中。它只是一个稍后在 save() 方法中解析的 CharField。
-
我会尝试
print self.tags_string.. 也许有问题。其他一切似乎都是正确的 -
print self.tags_string 返回字符串。没关系。此外,标签在此处成功创建:t = Tag.objects.create(name=tag) 并保存在数据库中。但关系表 entry_tags 为空。
-
我有时在 django 中看到 m2m 字段的奇怪行为...如果您切换到不同的数据库(例如 sqlite?),它的行为是否完全不同?或者,你能做一个最小的复制,没有其他代码吗?
标签: django django-models django-admin django-orm