Объекты, связанные с фильтрами в Django, используют ORM

Представьте себе, у меня есть модель A и модель B.

Class A (models.Model):
 a_name = models.CharField(max_length=100)

Class B (models.Model):
 b_name = models.CharField(max_length=100)
 a_name = models.ForeignKey(A, on_delete=models.CASCADE, to_field="a_name", db_column="a_name")

Тогда я хочу получить A , и у каждого A будут все связанные с ним B

A.filter(a_name="a_name").all()

Но я также хочу отфильтровать B по b_name, когда я получаю результат A, как я могу это сделать?

Я думаю, что вы пытаетесь сделать обратный запрос к модели отношения ForeignKey. То есть от родительского класса к дочернему классу.
Попробуйте следующее:

# Access the A obj you want to query 
a_obj = A.objects.filter(a_name = a_name)

# Query the related B obj's of the above A obj
# filtered by a specifc B obj name
# you can achieve this by calling _set on the child class (B)
# .ie. parentmodel.childmodel_set
b_obj = a_obj.b_set.filter(b_name=b_name)

Примечание:
При вызове _set имя модели записывается в нижнем регистре, т.е. b вместо B.
Если вы работаете с большими наборами данных, этот метод станет медленным. Вместо этого используйте ``fetch_related``. Я еще не начал оптимизировать запросы, но вы можете исследовать это, если потребуется.
Вернуться на верх