Django 通过相关管理器列中的外键过滤 table

Django filter table by foreign keys in related manager column

我的 Django 应用程序中有三个模型:

class MainData(models.Model):
    # bunch of fields

class Label(models.Model):
    label = models.CharField(max_length=512, null=True, unique=True)

class MapData(models.Model):
    labelMatch = models.ForeignKey(Label, on_delete=models.CASCADE)
    mainMatch = models.ForeignKey(MainData, on_delete=models.CASCADE)

通过我的应用程序,我让用户在搜索框中输入标签。我想做的是 return MainData 行 whos' MapData.label_match 字段是 Label.

中的条目

例如,假设用户在搜索框中输入字符串 'main32'。我目前的想法是首先找到匹配 'main32' 的 Label 行,然后使用 RelatedManager labelmatch_set 来获取 [=20= 匹配的所有 MapData 行] 指着。因此,如果有 10 个 MapData 行的 labelMatch 指向 label='main32'Label 条目,那么我想检索外键 mainMatch 的所有 10 MainData 行] 指向.

希望我解释清楚了。我已经:

matching_label_rows = Label.objects.filter(input)
matching_main_data_rows = matching_label_rows.mainMatch_set.????

如何从 matching_label_rows.mainMatch_set 检索指向 MainData 的行?还有这个操作可以单线完成吗?

您可以在 mapdata__labelMatch 关系上过滤 MainData,而不是先找到匹配的 Label

matching_main_data_rows = MainData.objects.filter(mapdata__labelmatch__label__icontains=input)

Lookups that span relationships