Django在save()函数中访问外键
这是我的代码:
class Publisher(models.Model):
name = models.CharField(
max_length = 200,
unique = True,
)
url = models.URLField()
def __unicode__(self):
return self.name
def save(self):
pass
class Item(models.Model):
publisher = models.ForeignKey(Publisher)
name = models.CharField(
max_length = 200,
)
code = models.CharField(
max_length = 10,
)
def __unicode__(self):
return self.name
我想在保存Publisher的时候,能够访问到每个Item。该怎么做呢?
比如说,我想在保存Publisher的时候,给每个和这个Publisher相关的Item的code
字段添加一些文本。
补充说明:
当我尝试实现第一个解决方案时,出现了一个错误:“'Publisher'对象没有'item_set'这个属性”。看来我不能这样访问它。还有其他的线索吗?
补充说明 2:
我发现问题出在我创建新的Publisher对象时,我是直接在里面添加Items的。因此,当我尝试保存Publisher并访问Items时,它们并不存在。
有没有办法解决这个问题?
1 个回答
12
你应该可以这样做:
def save(self, **kwargs):
super(Publisher, self).save(**kwargs)
for item in self.item_set.all():
item.code = "%s - whatever" % item.code
我不太喜欢你现在的做法,这样把 Item
和 Publisher
关联起来并不好。你最终想要达到什么目的呢?