class TagSynonym(models.Model):
source_tag_name = models.CharField(max_length=255, unique=True)
target_tag = models.ForeignKey(Tag, related_name='tag_synonyms', null=True)
class Tag(models.Model):
name = models.CharField(max_length=255, unique=True)
used_count = models.PositiveIntegerField(default=0)
class Meta:
ordering = ('-used_count', 'name')
对于给定的查询q
:
我想要在其名称或相关同义词的 source_tag_name 中包含查询的所有标签。
我还希望排序顺序由ordering
.
我有如下查询
tags_by_name = tag_all.filter(name__contains=q)
tags_by_synonyms = tag_all.select_prefetched('tag_synonyms').filter(tag_synonyms__source_tag_name__contains=q).distinct()
tags = tags_by_name | tags_by_synonyms
tags = tags.distinct()
我不确定上面的代码是否正确。有没有更好的方法来做到这一点?