Django filter through multiple fields in a many-to-many intermediary table

后端 未结 3 916
闹比i
闹比i 2021-02-19 06:15

I have the following models in my django project:

class Video(models.Model):
    media = models.ForeignKey(Media)

class Media(models.Model):
    title = models.         


        
相关标签:
3条回答
  • 2021-02-19 06:21

    You can chain the filters together for an "AND" construct.

    Videos where the format is f AND the format's status is 10

    Video.objects.filter(media__formats=f).filter(media__mediaformat__status=10)
    
    0 讨论(0)
  • 2021-02-19 06:31

    Now, I want to filter all videos which have a specific format, AND the status code for that format is 10 (ready to use). How can I do that? (assuming that f is the format)

    The code you posted will do exactly what you want:

    Video.objects.filter(media__formats=f, media__mediaformat__status=10)
    

    This is documented in the filter() documentation:

    Multiple parameters are joined via AND in the underlying SQL statement.

    0 讨论(0)
  • 2021-02-19 06:42

    Probably not relevant for the OP, but might be for others like me who found this thread while searching for the right answer.

    Ludwik got it right, but the section in the documentation that explains all of this, as well as how to do excludes, is in the queries documentation.

    Note that splitting the filter into two filter calls like Chris suggested will give you the exact opposite result: it will search for a video that has a media format f and that has a media format, not necessarily the same media format, with a status of 10.

    0 讨论(0)
提交回复
热议问题