如何在limit_choices_to(Django)中获取实体实例?

时间:2016-09-20 12:02:43

标签: python django

例如:

class Foo(models.Model):
    bar = models.OneToOneField(
        'app.Bar',
        limit_choices_to=Q(type=1) & Q(foo=None) | Q(foo=instance)
    )


class Bar(models.Model):
    TYPE_CHOICE = (
        (0, 'hello'),
        (1, 'world')
    )
    type = models.SmallIntegerField(
        choices=TYPE_CHOICE,
        default=0
    )

我想在Django admin中只显示这些具有type = 1的条形图,与Foo的关系没有关系,并显示已编辑实体的链接条形图(如果是)。

当然,我们可以通过覆盖formfield_for_foreignkey的{​​{1}}方法来实现,但我们希望通过admin.ModelAdmin执行此操作。

如何获取已编辑实体的实例?

1 个答案:

答案 0 :(得分:4)

如果将callable传递给limit_choices_to,则该callable没有引用当前实例。因此,您无法根据当前实例进行过滤。

还有其他几种方法可以实现您的目标,例如覆盖您提到的formfield_for_foreignkey(),或覆盖表单__init__()方法中的formfield查询集。 limit_choices_to只是不是其中之一。