Django对代理= True的模型调用方法

时间:2014-05-20 12:09:06

标签: django django-models django-inheritance

所以我有一个简单的Model继承,除了子模型是一个代理。 问题是,在我看来,如果我这样做:

concept = get_object_or_404(Term, pk=...)

然后我打电话

concept.set_siblings('en') # 'en' is the langcode

我收到错误,因为set_siblings还需要一个参数(relation_type)。调用Concept模型中的方法。如果我打印concept.__class__.__name__,我会看到Concept。那么如何正确调用set_siblings模型中的Term

这是the docs,但这无助于我澄清问题。

models.py

class Concept(Model):
    namespace = ForeignKey(Namespace)
    code = CharField(max_length=10)
    date_entered = DateTimeField(blank=True, null=True)
    date_changed = DateTimeField(blank=True, null=True)
    # .....

    def set_siblings(self, langcode, relation_type):
        setattr(self, relation_type + '_concepts',
                self.get_siblings(langcode, relation_type))
    #.....

class Term(Concept):
    def set_siblings(self, langcode):
        for relation_type in ['broader', 'narrower', 'related']:
            super(Term, self).set_siblings(langcode, relation_type)

    class Meta:
        proxy = True
        verbose_name = "concept"

    objects = ConceptManager('Concepts')

0 个答案:

没有答案