首页 > 解决方案 > 通过 Django 中的粘合表获取数据

问题描述

我有这样的关系:

dictionary table

dictionary_child_char table

dictionary table (same as first table)

这是我的模型:

class Dictionary(models.Model):

    traditional = models.CharField(max_length=50)
    simplified = models.CharField(max_length=50)
    pinyin_numbers = models.CharField(max_length=75)
    pinyin_marks = models.CharField(max_length=75)
    translation = models.TextField()
    level = models.IntegerField()
    frequency = models.IntegerField()
    idiom = models.BooleanField()
    child_char = models.ManyToManyField('Dictionary', through='DictionaryChildChar', null=True)
    disabled = models.BooleanField()
    simptradsame = models.BooleanField()

    class Meta:
        db_table = 'dictionary'
        indexes = [
            models.Index(fields=['simplified', ]),
            models.Index(fields=['traditional', ]),
        ]

class DictionaryChildChar(models.Model):

    class Meta:
        db_table = 'dictionary_child_char'

    from_dictionary = models.ForeignKey(Dictionary, on_delete=models.CASCADE, related_name="from_dictionary")
    to_dictionary = models.ForeignKey(Dictionary, on_delete=models.CASCADE, related_name="to_dictionary")
    word_order = models.IntegerField()

每个字典项与另一个字典项具有潜在的多对多关系(它是汉字,因此每个单词可能由几个组成字符组成)

我试图查看这些关系,并实际获取每个关系的字典条目:

dictionary = Dictionary.objects.filter(Q(simplified=char) | Q(traditional=char)).prefetch_related('child_char__to_dictionary')[:1]

item = dictionary[0]
item.to_dictionary.all().values()

但是,当我这样做时:

print(item.to_dictionary.all().values())

我明白了:

<QuerySet [{'id': 92661, 'from_dictionary_id': 37607, 'to_dictionary_id': 37589, 'word_order': 0}, {'id': 92662, 'from_dictionary_id': 37608, 'to_dictionary_id': 37589, 'word_order': 0}, {'id': 92663, 'from_dictionary_id': 37634, 'to_dictionary_id': 37589, 'word_order': 0}, {'id': 92664, 'from_dictionary_id': 37635, 'to_dictionary_id': 37589, 'word_order': 0}, {'id': 92665, 'from_dictionary_id': 58861, 'to_dictionary_id': 37589, 'word_order': 1}]>

如何,而不是 to_dictionary_id,我实际上得到与之关联的字典条目?

我是否需要做另一个相关的预取,或者?

标签: pythondjango

解决方案


推荐阅读