Django搜索报错FieldError:Related Field got invalid lookup: tag求助
Django壁纸搜索FieldError问题解决
错误根源
你的Wallpaper模型中tags字段使用的是TaggableManager()(属于django-taggit组件),而非你自定义的Tags模型关联。但查询时错误地用了tags__tag__icontains=search:
- 若用django-taggit,其内置标签模型的字段名为
name,不是tag - 你定义的
Tags模型并未被实际关联使用
两种修复方案
方案1:继续使用django-taggit
修改查询语句中的标签搜索逻辑,适配taggit的字段名:
if search: wallpapers = Wallpaper.objects.filter( Q(name__icontains=search) | Q(category__category_name__icontains=search) | Q(tags__name__icontains=search) # 替换tags__tag为tags__name ).distinct().order_by('-pk') WALL = None
方案2:改用自定义Tags模型
如果想使用自己定义的Tags模型,需修改Wallpaper的tags字段为多对多关联:
# models.py 中Wallpaper类的tags字段修改 class Wallpaper(models.Model): # 保留其他原有字段 tags = models.ManyToManyField(Tags) # 替换原TaggableManager()
修改后原查询中的tags__tag__icontains=search即可正常生效。
额外提示
- 使用django-taggit时,需确保
INSTALLED_APPS已添加'taggit' distinct()必须保留,避免多对多关联导致的重复查询结果
内容的提问来源于stack exchange,提问作者Mario_z04
相关产品推荐
相关产品推荐

