Django在save()函数中访问外键

5 投票
1 回答
7037 浏览
提问于 2025-04-11 20:14

这是我的代码:

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

我不太喜欢你现在的做法,这样把 ItemPublisher 关联起来并不好。你最终想要达到什么目的呢?

撰写回答