【发布时间】:2014-04-15 06:49:07
【问题描述】:
我在访问 ManyToManyField 时遇到了这个奇怪的问题。
我有以下型号。
class Link(models.Model):
title = models.CharField(max_length = 200)
url = models.URLField(unique = True)
tags = models.ManyToManyField(Tag)
creation_date = models.DateTimeField(auto_now_add = True)
user = models.ForeignKey(User)
likes = models.ManyToManyField(User, related_name = "%(app_label)s_%(class)s_user_likes")
dis_likes = models.ManyToManyField(User, related_name = "%(app_label)s_%(class)s_user_dis_likes")
class Meta:
abstract = True
class URL(Link):
preview_image = models.URLField()
preview_heading = models.CharField(max_length = 100)
preview_content = models.CharField(max_length = 100)
当我尝试访问URL.objects.get(pk=1).likes.all() 时,我收到Cannot resolve keyword '' into field. Choices are:... 错误。
URL.objects.get(pk=1).tags.all(), URL.objects.get(pk=1).user 和 URL.objects.filter(likes=auser, pk=1) 工作正常。
更新:
-
likes和dis_likes字段是使用south到schemamigration添加的 - 之前我用
Django 1.6.1,更新为Django 1.6.2,问题依旧 - 已截断数据库,将其同步为新表,但问题仍然存在
-
部分回溯:
File "F:\system\env\lib\site-packages\django\db\models\manager.py" in all 133. return self.get_queryset() File "F:\system\env\lib\site-packages\django\db\models\fields\related.py" in get_queryset 549. return super(ManyRelatedManager, self).get_queryset().using(db)._next_is_sticky().filter(**self.core_filters) File "F:\system\env\lib\site-packages\django\db\models\query.py" in filter 590. return self._filter_or_exclude(False, *args, **kwargs) File "F:\system\env\lib\site-packages\django\db\models\query.py" in _filter_or_exclude 608. clone.query.add_q(Q(*args, **kwargs)) File "F:\system\env\lib\site-packages\django\db\models\sql\query.py" in add_q 1198. clause = self._add_q(where_part, used_aliases) File "F:\system\env\lib\site-packages\django\db\models\sql\query.py" in _add_q 1234. current_negated=current_negated) File "F:\system\env\lib\site-packages\django\db\models\sql\query.py" in build_filter 1100. allow_explicit_fk=True) File "F:\system\env\lib\site-packages\django\db\models\sql\query.py" in setup_joins 1357. names, opts, allow_many, allow_explicit_fk) File "F:\system\env\lib\site-packages\django\db\models\sql\query.py" in names_to_path 1277. "Choices are: %s" % (name, ", ".join(available))) Exception Type: FieldError at /url/3 Exception Value: Cannot resolve keyword '' into field. Choices are: __app___article_user_dis_likes, __app___article_user_likes, __app___imageurl_user_dis_likes, __app___imageurl_user_likes, __app___review_user_dis_likes, __app___review_user_likes, __app___url_user_dis_likes, __app___url_user_likes, __app___videourl_user_dis_likes, __app___videourl_user_likes, article, date_joined, email, first_name, groups, id, imageurl, is_active, is_staff, is_superuser, last_login, last_name, logentry, password, review, url, user_permissions, username, userobjectpermission, videourl
【问题讨论】:
-
无法在 1.6.2 上重现,
URL.objects.get(pk=...).likes.all()按预期工作。您的数据库模式是否与您的模型定义保持同步?你运行的是哪个 Django 版本? -
@lanzz 是的,数据库模式是最新的模型定义,我用南添加喜欢和不喜欢。我正在使用 Django 1.6
-
你能提供完整的回溯吗?
-
@lanzz 我已经发布了部分回溯
-
请发布完整回溯。您得到的
FieldError异常似乎与URL实例无关,而是与User实例有关。
标签: python django manytomanyfield