Django ORM: Selecting related set

后端 未结 4 1077
遥遥无期
遥遥无期 2020-12-24 13:51

Say I have 2 models:

class Poll(models.Model):
    category = models.CharField(u\"Category\", max_length = 64)
    [...]

class Choice(models.Model):
    pol         


        
4条回答
  •  醉梦人生
    2020-12-24 14:20

    Update: Since Django 1.4, this feature is built in: see prefetch_related.

    First answer: don't waste time writing something like qbind until you've already written a working application, profiled it, and demonstrated that N queries is actually a performance problem for your database and load scenarios.

    But maybe you've done that. So second answer: qbind() does what you'll need to do, but it would be more idiomatic if packaged in a custom QuerySet subclass, with an accompanying Manager subclass that returns instances of the custom QuerySet. Ideally you could even make them generic and reusable for any reverse relation. Then you could do something like:

    Poll.objects.filter(category='foo').fetch_reverse_relations('choices_set')
    

    For an example of the Manager/QuerySet technique, see this snippet, which solves a similar problem but for the case of Generic Foreign Keys, not reverse relations. It wouldn't be too hard to combine the guts of your qbind() function with the structure shown there to make a really nice solution to your problem.

提交回复
热议问题