Фильтр Django Queryset_A с Queryset_B на основе определенного свойства с одинаковым значением

  1. Фильтр модели_A с моделью_B
  2. Возврат элементов модели_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
Вернуться на верх