Django字段的调用方法

时间:2018-02-01 16:09:46

标签: django django-models

class Colour(models):
    ...
    def colour_preview(self):
        return format_html(...)


class ColourTheme(models):
    colour1 = models.ForeignKey(Colour)
    colour2 = models.ForeignKey(Colour)
    colour3 = models.ForeignKey(Colour)
    ...
    def preview(self):
        for field in self._meta.get_fields(include_parents=False):
            if (field.related_model == Colour):
                field.colour_preview()

我有一个带有多个Color外键的ColourTheme模型,我想在这些字段引用的每个Color对象上调用一个函数。上面的最后一行代码失败了。我想在所有颜色字段上调用colour_preview而不对它们进行硬编码(self.colour1.colour_preview()有效但不理想)。

我怎么能实现这个目标?

1 个答案:

答案 0 :(得分:0)

您无法参考该字段以访问相关对象方法。

尝试这样的事情(我还没有测试过):

class ColourTheme(models):
    colour1 = models.ForeignKey(Colour)
    colour2 = models.ForeignKey(Colour)
    colour3 = models.ForeignKey(Colour)
    ...
    def preview(self):
        for field in self._meta.get_fields(include_parents=False):
            if (field.related_model == Colour):
                field_obj = field.value_from_obj(self) # To get obj reference
                field_obj.colour_preview()