附加到Django模型的属性是否可以获取有关给定记录的信息?

时间:2011-12-23 04:57:40

标签: python django

我有一个类对象作为属性附加到Django模型。出于问题的目的,让我们假设它看起来像:

class Foo(object):
    def bar(self):
        print "Does things here"

class Task(models.Model):
    name = models.CharField(max_length=30)
    user = models.ForeignKey(User, related_name = 'tasks'

    foo = Foo()

我可以从foo属性访问特定记录的值吗?所以,例如,如果我有类似的东西:

task = Task(name="Get things done", user=JordanReiter)
newest_task = Task.objects.filter(user=JordanReiter).order_by('-pk')[0]

然后我可以在spiffy类上有一些函数Foo,所以我可以运行类似的东西:

newest_task.foo.spiffy()

spiffy函数会知道在这种情况下,name的值是“Get things done”等。

基本上我想知道属性是否可以知道有关调用它们的实例的信息,或者只知道调用它们的类。当然,如果可以,我该如何访问实例的值?

在完美的世界中,foo属性可以访问有关Task类以及newest_task实例的信息。

2 个答案:

答案 0 :(得分:1)

听起来你可能需要descriptor。它们是实现在获取或设置时调用的特殊方法的类,并传递给父实例。

答案 1 :(得分:0)

您可以使Foo成为custom manager,以便它本身知道Task