在django admin中配置搜索域是一个外键时的处理方法


Posted in Python onMay 20, 2020

python 2.7.11

django 1.8.4

错误内容:related Field has invalid lookup: icontains

我原来默认认为在处理外键搜索的时候,django会自动将该外键的行数据以str()化之后进行搜索,但其实并不是这样的,如果将外键加入到搜索域中,需要明确写出来。

这个是我从网上查到的解决方案,测试可用,如下:

models.py 文件

# coding:utf8
from django.db import models

class Book(models.Model):
  
  name = models.CharField(max_length=255)
  title = models.CharField(max_length=255)
  price = models.IntegerField()
  ...
  
class Category(models.Model):
  
  CATEGORY_CHOICES = (
    ('00', 'English'),
    ('01', 'Computer'),
  )
  
  book = models.ForeignKey(Book)
  category = models.CharField(max_length=255, choices=CATEGORY_CHOICES)
  remark = models.CharField(max_length=255)
  ...

admin.py 文件(以 category 为例)

# coding: utf8
from django.contrib import admin
from django import forms

from .models import Category

class CategoryAdmin(admin.ModelAdmin):

  search_fileds = ('book__name', 'book__title', 'book__price', 'category') # 设置搜索栏范围,如果有外键,要注明外键的哪个字段,双下划线
  list_display = ('book', 'category') # 在页面上显示的字段,若不设置则显示 models.py 中 __unicode__(self) 中所返回的值
  list_display_links = ('category') # 设置页面上哪个字段可单击进入详细页面
  fields = ('category', 'book') # 设置添加/修改详细信息时,哪些字段显示,在这里 remark 字段将不显示
  
admin.site.register(Category, CategoryAdmin)

[ 说明 ]

在使用 Django admin 系统中的搜索时可能会出现“related Field has invalid lookup: icontains”错误,主要原因是外键查询是需要指定相应的字段的。

外键不应该只是一个model,而该是另一个表的明确的一个字段。

所以我们需要指定特定的字段 "本表外键字段__外键所在表需查询字段"。

补充知识:Django的model中使用外键,但在页面上显示的是xxx_object?

在Django中定义了如下A,B两个模型:

class A:
   name=models.CharField(max_length=15)
   def __unicode__(self):
       return self.name
 
class B:
   name=models.CharField(max_length=15)
   f=models.ForeignKey(A,on_delete=models.DO_NOTHING)
 
   def __unicode__(self):
      return self.name

注:我在测试环境中使用的是python2.7,一切操作做完之后,部署到云服务器上后,就在后台管理系统中看到B的属性一栏中f显示为A_Object,并没有显示A的属性——name的值。

究其缘由,发现我的云服务器上用的是python3.6,在这里要将__unicode__()方法替换成__str__()方法才行.

class A:
   name=models.CharField(max_length=15)
   def __str__(self):
       return self.name
 
class B:
   name=models.CharField(max_length=15)
   f=models.ForeignKey(A,on_delete=models.DO_NOTHING)
 
   def __str__(self):
      return self.name

当然,如果使用的版本是python3.x,为了更好地兼容python2.x,可以使用@python_2_unicode_compatible装饰器来使python2.x想python3.x一样处理Unicode字符。

from django.utils.encoding import python_2_unicode_compatible
 
@python_2_unicode_compatible
class A:
   name=models.CharField(max_length=15)
   def __str__(self):
       return self.name
 
@python_2_unicode_compatible
class B:
   name=models.CharField(max_length=15)
   f=models.ForeignKey(A,on_delete=models.DO_NOTHING)
 
   def __str__(self):
      return self.name

以上这篇在django admin中配置搜索域是一个外键时的处理方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python的Flask框架中Flask-Admin库的简单入门指引
Apr 07 Python
对Python 2.7 pandas 中的read_excel详解
May 04 Python
Python实现的读取电脑硬件信息功能示例
May 30 Python
Python操作mongodb的9个步骤
Jun 04 Python
PyQt4 treewidget 选择改变颜色,并设置可编辑的方法
Jun 17 Python
Python基于BeautifulSoup和requests实现的爬虫功能示例
Aug 02 Python
python对Excel按条件进行内容补充(推荐)
Nov 24 Python
Python学习之路安装pycharm的教程详解
Jun 17 Python
python 解决selenium 中的 .clear()方法失效问题
Sep 01 Python
python 遍历磁盘目录的三种方法
Apr 02 Python
浅谈tf.train.Saver()与tf.train.import_meta_graph的要点
May 26 Python
Python使用海龟绘图实现贪吃蛇游戏
Jun 18 Python
Python使用Paramiko控制liunx第三方库
May 20 #Python
解决django框架model中外键不落实到数据库问题
May 20 #Python
Django ForeignKey与数据库的FOREIGN KEY约束详解
May 20 #Python
让Django的BooleanField支持字符串形式的输入方式
May 20 #Python
django 解决model中类写不到数据库中,数据库无此字段的问题
May 20 #Python
基于Python脚本实现邮件报警功能
May 20 #Python
完美解决Django2.0中models下的ForeignKey()问题
May 19 #Python
You might like
实现分十页分向前十页向后十页的处理
2006/10/09 PHP
一个简单计数器的源代码
2006/10/09 PHP
基于mysql的论坛(7)
2006/10/09 PHP
php excel reader读取excel内容存入数据库实现代码
2012/12/06 PHP
PHP 登录记住密码实现思路
2013/05/07 PHP
php实现微信扫码自动登陆与注册功能
2016/09/22 PHP
详解php几行代码实现CSV格式文件输出
2017/07/01 PHP
Javascript技巧之不要用for in语句对数组进行遍历
2010/10/20 Javascript
用Javascript评估用户输入密码的强度实现代码
2011/11/30 Javascript
jQuery页面图片伴随滚动条逐渐显示的小例子
2013/03/21 Javascript
使用jquery实现div的tab切换实例代码
2013/05/27 Javascript
JavaScript实现图片DIV竖向滑动的方法
2015/04/25 Javascript
JavaScript浮点数及运算精度调整详解
2016/10/21 Javascript
echarts3 使用总结(绘制各种图表,地图)
2017/01/05 Javascript
详解Angular之constructor和ngOnInit差异及适用场景
2017/06/22 Javascript
详解vue-loader在项目中是如何配置的
2018/06/04 Javascript
Bootstrap Table 双击、单击行获取该行及全表内容
2018/08/31 Javascript
关于单文件组件.vue的使用
2018/09/20 Javascript
Windows下支持自动更新的Electron应用脚手架的方法
2018/12/24 Javascript
200行HTML+JavaScript实现年会抽奖程序
2019/01/22 Javascript
JS回调函数深入理解
2019/10/16 Javascript
使用Python编写Linux系统守护进程实例
2015/02/03 Python
老生常谈python中的重载
2018/11/11 Python
在python中使用xlrd获取合并单元格的方法
2018/12/26 Python
Python读写文件基础知识点
2019/06/10 Python
Win10环境中如何实现python2和python3并存
2020/07/20 Python
Roots加拿大官网:加拿大休闲服饰品牌
2016/10/24 全球购物
意大利在线购买隐形眼镜网站:VisionDirect.it
2019/03/18 全球购物
Ellos瑞典官网:北欧地区时尚、美容和住宅领域领先的电子商务网站
2019/11/21 全球购物
研究生自荐信
2013/10/09 职场文书
令人啧啧称赞的经理推荐信
2013/11/07 职场文书
暑期社会实践方案
2014/02/05 职场文书
领导干部个人整改措施落实情况汇报
2014/10/29 职场文书
2015年实习单位评语
2015/03/25 职场文书
放假通知格式
2015/04/14 职场文书
《吃水不忘挖井人》教学反思
2016/02/22 职场文书