Django-在第三张表上过滤外键

时间:2019-09-23 08:15:03

标签: mysql django python-3.x

我正在尝试根据ForeignKey的特定字段的值来过滤Django中的表,该字段是第三张表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和表A中的user_type = 1的所有数据

1 个答案:

答案 0 :(得分:2)

由于user_type模型上的A字段是CharField。因此,您无法过滤数字。不过,您可以过滤该user_type字段的值:

C.objects.filter(test='test', b__user_type__user_type='my_user_type_value')

或者您可以过滤A对象的主键:

C.objects.filter(test='test', b__user_type_id=1)