nal*_*zok 6 python sql django django-models django-admin
这是我的代码的相关部分:
模型.py
class Blogger(models.Model):
identity = models.ForeignKey(User, models.SET_NULL, null=True)
def __str__(self):
return self.identity.username
Run Code Online (Sandbox Code Playgroud)
我希望能够通过他们的博客来搜索blogger_instance.identity.username,所以我这样做了:
管理员.py
@admin.register(Blogger)
class BloggerAdmin(admin.ModelAdmin):
list_display = ('__str__', 'identity')
search_fields = ['__str__']
Run Code Online (Sandbox Code Playgroud)
我转到http://127.0.0.1:8000/admin/blog/blogger/,user在搜索字段中输入,点击Search,然后得到一个FieldError:
FieldError at /admin/blog/blogger/
Cannot resolve keyword '' into field. Choices are: bio, blog, comment, id, identity, identity_id
Request Method: GET
Request URL: http://127.0.0.1:8000/admin/blog/blogger/?q=user
Django Version: 1.10.6
Exception Type: FieldError
Exception Value:
Cannot resolve keyword '' into field. Choices are: bio, blog, comment, id, identity, identity_id
Exception Location: /Users/sunqingyao/Envs/django_test/lib/python3.6/site-packages/django/db/models/sql/query.py
in names_to_path, line 1327
Python Executable: /Users/sunqingyao/Envs/django_test/bin/python
Python Version: 3.6.0
Python Path:
['/Users/sunqingyao/PycharmProjects/diyblog',
'/Users/sunqingyao/PycharmProjects/diyblog',
'/Users/sunqingyao/Envs/django_test/lib/python36.zip',
'/Users/sunqingyao/Envs/django_test/lib/python3.6',
'/Users/sunqingyao/Envs/django_test/lib/python3.6/lib-dynload',
'/usr/local/Cellar/python3/3.6.0/Frameworks/Python.framework/Versions/3.6/lib/python3.6',
'/Users/sunqingyao/Envs/django_test/lib/python3.6/site-packages']
Server time: Tue, 28 Mar 2017 13:01:58 +0800
Run Code Online (Sandbox Code Playgroud)
当我改变时
search_fields = ['__str__']
Run Code Online (Sandbox Code Playgroud)
到
search_fields = ['identity']
Run Code Online (Sandbox Code Playgroud)
我得到了一个类型错误:
TypeError at /admin/blog/blogger/
Related Field got invalid lookup: icontains
Request Method: GET
Request URL: http://127.0.0.1:8000/admin/blog/blogger/?q=user
Django Version: 1.10.6
Exception Type: TypeError
Exception Value:
Related Field got invalid lookup: icontains
Exception Location: /Users/sunqingyao/Envs/django_test/lib/python3.6/site-packages/django/db/models/fields/related.py in get_lookup, line 694
Python Executable: /Users/sunqingyao/Envs/django_test/bin/python
Python Version: 3.6.0
Python Path:
['/Users/sunqingyao/PycharmProjects/diyblog',
'/Users/sunqingyao/PycharmProjects/diyblog',
'/Users/sunqingyao/Envs/django_test/lib/python36.zip',
'/Users/sunqingyao/Envs/django_test/lib/python3.6',
'/Users/sunqingyao/Envs/django_test/lib/python3.6/lib-dynload',
'/usr/local/Cellar/python3/3.6.0/Frameworks/Python.framework/Versions/3.6/lib/python3.6',
'/Users/sunqingyao/Envs/django_test/lib/python3.6/site-packages']
Server time: Tue, 28 Mar 2017 13:12:09 +0800
Run Code Online (Sandbox Code Playgroud)
我应该设置什么值search_fields?
检查搜索字段文档,如其中所述
\n\n\n\n\n这些字段应该是某种文本字段,例如 CharField 或\n TextField。您还可以使用查找 API \xe2\x80\x9cfollow\xe2\x80\x9d 表示法对ForeignKey 或\n ManyToManyField 执行相关查找:
\n\nRun Code Online (Sandbox Code Playgroud)\nsearch_fields = [\'foreign_key__related_fieldname\']\n
所以在你的情况下
\n\nsearch_fields = [\'identity__username\']\nRun Code Online (Sandbox Code Playgroud)\n\n另请注意,它并没有说您可以像您最初尝试的那样使用计算属性
\n| 归档时间: |
|
| 查看次数: |
1789 次 |
| 最近记录: |