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

时间:2019-07-18 21:48:53

标签: django foreign-keys django-related-manager

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

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

例如,假设用户在搜索框中输入字符串“ main32”。我目前的想法是首先找到与“ main32”匹配的Label行,然后使用RelatedManager labelmatch_set获取MapData指向的所有MapData.mainMatch行至。因此,如果有10条MapData行的labelMatch指向带有Label的{​​{1}}条目,那么我想检索外键{{1} }指向。

希望我已经解释了。我必须:

label='main32'

如何从MainData检索指向mainMatch的行?可以单线执行此操作吗?

1 个答案:

答案 0 :(得分:1)

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

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

Lookups that span relationships