我在访问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
答案 0 :(得分:2)
我想我发现了这个问题。我想问题是我的应用程序的名称是__app__
。 Django字段查找假设__
之前的所有内容(双下划线)是一个字段,在我的情况下解析为``(空字符串)。
总是很难命名默认应用程序及其所在的项目。思想__app__
是更加pythonic和聪明的解决方案。我想我应该将我的应用重命名为app
。希望这有效。
答案 1 :(得分:2)
如果您尝试在Django期望字段名称的位置使用__unicode__
或__str__
,则会发生这种情况。在我的情况下,我试图使用__unicode__
,因为我为模型提供了有意义的实现,并希望在第一列表中重用它。
为了解决这个问题,我添加了
class AdminBase(admin.ModelAdmin):
def natural_title(self, obj):
return unicode(obj)
natural_title.short_description = 'Title'
其中AdminBase
是我的管理类的自定义基类。我现在可以使用'natural_title'
作为字段名称,并获得我正在寻找的结果。