0

我的 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行谁的MapData.label_match字段是Label.

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

希望我解释得很好。我已经得到:

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

如何从中检索指向的MainDatamatching_label_rows.mainMatch_set?并且这个操作可以作为一个单行来完成吗?

4

1 回答 1

1

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

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

跨越关系的查找

于 2019-07-18T23:37:46.823 回答