Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
520 views
in Technique[技术] by (71.8m points)

python - How to get instance of entity in limit_choices_to (Django)?

For instance:

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
    )

I wanna show in Django admin only these Bars that have type = 1, that haven't relations with Foo's, and show linked Bar of edited entity (if it is).

Of course, we can do it via overriding formfield_for_foreignkey method of admin.ModelAdmin, but we want do this via limit_choices_to.

How to get instance of edited entity?

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)

If you pass a callable to limit_choices_to, that callable has no reference to the current instance. As such, you can't filter based on the current instance either.

There are several other ways to achieve what you want, such as overriding formfield_for_foreignkey() as you mentioned, or overriding the formfield's queryset in the form's __init__() method. limit_choices_to just isn't one of them.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...