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)
我的 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)