Django MongoDB 数据库错误位于 /admin

0 投票
1 回答
987 浏览
提问于 2025-04-18 02:27

我正在尝试在Django中使用MongoDB,但遇到了一个问题。具体来说,网站的某些部分出现了“数据库错误:这个查询不被数据库支持。”正如这里提到的类似问题,这个错误是由.../admin/templates/change_list.html引起的,出错的行是第85行:

{% for spec in cl.filter_specs %}{% admin_list_filter cl spec %}{% endfor %}

我有几个模型,里面包含了各种类型的字段,比如字符字段、整数字段、布尔字段、日期字段、网址字段和小数字段。还有一个多对多字段:

class Trail(models.Model):
    sections = models.ManyToManyField(TrailSection)

我在用户等方面没有遇到问题,但每当我尝试访问Trail模型时,就会出现上述错误。当我点击/admin页面的TrailSection部分时没有问题,但点击Trail时就会出现这个错误。调用

associatedTrails = Trail.objects.filter(sections=sect).order_by('-date').values('trail_id','name')

是没问题的,但当我后面使用

for t in associatedTrails:

时就会出错。StackOverflow上的另一个问题将这个错误描述为一个需要修复的bug,但我想问的是:为什么这个问题有时会出现?为什么在TrailSections或其他/admin页面没有问题,但这个页面却会出错?有没有好的解决办法?

1 个回答

0

原来,django-norel不支持多对多字段(ManyToManyFields)。不过,大部分情况下,可以用列表字段(ListFields)来替代,这种字段在norel中是支持的,但在关系型数据库中不支持。想了解更多细节,可以点击这里

除了多对多字段不被支持之外,admin.py中的列表过滤器(list_filter)只能包含一个项目。也许其他人能解释为什么这样,但如果只用一个过滤器,就能解决所有模型的错误。

撰写回答