Джанго - фильтрация по внешнему ключу на третьей таблице - PullRequest
1 голос
/ 23 сентября 2019

Я пытаюсь отфильтровать таблицу в Django на основе значения определенного поля ForeignKey, которое является полем третьей таблицы ForignKey.

class A(models.Model):
    user_type = models.CharField(blank=True, max_length=32)
    description = models.CharField(blank=True,max_length=512)

class B(models.Model):
    user = models.OneToOneField(User, on_delete=models.PROTECT)
    name = models.CharField(max_length=32, blank=True)
    surname = models.CharField(max_length=32, blank=True)
    user_type = models.ForeignKey(A,on_delete=models.SET_NULL, null=True)

class C(models.Model):
    user = models.ForeignKey(User, on_delete=models.SET_NULL, null=True)
    user_profile = models.ForeignKey(B,on_delete=models.SET_NULL, null=True)

    test = models.CharField(blank=False,max_length=512)

вот запрос, который я хочусделать: я хочу запросить на C и найти user_type_id на B, а затем отфильтровать user_type значение на A что-то вроде этого (просто чтобы показать, что я хочу):

models.C.objects.filter(test="test").filter(B__user_type_id__A__user_type = 1)

окончательный результат:
Я хочу получить все данные, которые test="test" в таблице C и user_type = 1 в таблице A

1 Ответ

2 голосов
/ 23 сентября 2019

Поскольку поле user_type на модели A равно CharField.Таким образом, вы не можете фильтровать по числу.Однако вы можете отфильтровать значение этого поля user_type:

C.objects.filter(<b>test='test', b__user_type__user_type='my_user_type_value'</b>)

Или выполнить фильтрацию по первичному ключу объекта A:

C.objects.filter(<b>test='test', b__user_type_id=<i>1</i></b>)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...