Фильтр Django Queryset_A с Queryset_B на основе определенного свойства с одинаковым значением
- Фильтр модели_A с моделью_B
- Возврат элементов модели_A
class Model_A(models.Model):
name = models.CharField()
age = models.CharField()
class Model_B(models.Model):
name = models.CharField()
location = models.CharField()
def some_filter_function():
return [list of Model_A items based on Model_B.name]
учитывая, что вы не можете изменить модель для использования foreignkey, вы можете попробовать что-то вроде этого:
my_items = []
names = Model_b.objects.all()
for name in names:
name_b = name.name
model_a = Model_a.objects.filter(name = name)
for item in model_a:
my_items.append(item)
Я согласен с @William Van Onsam.
Если вы определите свой Model_A
как
class Model_B(models.Model):
name = models.CharField()
location = models.CharField()
class Model_A(models.Model):
name = models.CharField()
age = models.CharField()
b = models.ForeignKey(Model_B, on_delete=models.CASCADE)
# NOTE you need to declare Model_B prior to Model_A,
# and then you can use Model_B as a parameter here.
Тогда вы можете сделать
def some_filter_function():
b = get_model_b()
return Model_A.objects.filter(name=b.name)
в вашей функции просмотра.
Рассмотрите следующий подход.
def some_filter_function():
queryset = None
if Model_B.objects.filter(name="Jorge").exists()
queryset = Model_A.objects.all()
return queryset