在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 相关文章推荐
pymongo为mongodb数据库添加索引的方法
May 11 Python
利用Python中SocketServer 实现客户端与服务器间非阻塞通信
Dec 15 Python
Python tornado队列示例-一个并发web爬虫代码分享
Jan 09 Python
Python zip()函数用法实例分析
Mar 17 Python
python批量查询、汉字去重处理CSV文件
May 31 Python
python实现字符串完美拆分split()的方法
Jul 16 Python
python3.6编写的单元测试示例
Aug 17 Python
用OpenCV将视频分解成单帧图片,图片合成视频示例
Dec 10 Python
Python json转字典字符方法实例解析
Apr 13 Python
Python变量及数据类型用法原理汇总
Aug 06 Python
python speech模块的使用方法
Sep 09 Python
Python利用matplotlib绘制折线图的新手教程
Nov 05 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
PHP下MAIL的另一解决方案
2006/10/09 PHP
php adodb连接mssql解决乱码问题
2009/06/12 PHP
php源码加密 仿微盾PHP加密专家(PHPCodeLock)
2010/05/06 PHP
php递归创建和删除文件夹的代码小结
2012/04/13 PHP
yii上传文件或图片实例
2014/04/01 PHP
PHP CURL post数据报错 failed creating formpost data
2016/10/16 PHP
php正则判断是否为合法身份证号的方法
2017/03/16 PHP
对laravel的session获取与存取方法详解
2019/10/08 PHP
js获取单元格自定义属性值的代码(IE/Firefox)
2010/04/05 Javascript
jQuery基础知识filter()和find()实例说明
2010/07/06 Javascript
js(JavaScript)实现TAB标签切换效果的简单实例
2014/02/26 Javascript
node.js中的fs.lchmod方法使用说明
2014/12/16 Javascript
使用jQuery仿苹果官网焦点图特效
2014/12/23 Javascript
基于jQuery实现仿百度首页换肤背景图片切换代码
2015/08/25 Javascript
JavaScript无缝滚动效果的实例代码
2017/03/27 Javascript
JS正则表达式验证中文字符
2017/05/08 Javascript
浅谈Vue SPA 首屏加载优化实践
2017/12/15 Javascript
Node.js使用Koa搭建 基础项目
2018/01/08 Javascript
JavaScript中EventLoop介绍
2018/01/22 Javascript
详解vue项目打包步骤
2019/03/29 Javascript
vue 根据选择条件显示指定参数的例子
2019/11/09 Javascript
python基础教程之lambda表达式使用方法
2014/02/12 Python
Python 实现引用其他.py文件中的类和类的方法
2018/04/29 Python
python实现二分类的卡方分箱示例
2019/11/22 Python
python使用正则表达式去除中文文本多余空格,保留英文之间空格方法详解
2020/02/11 Python
Python3 获取文件属性的方式(时间、大小等)
2020/03/12 Python
Python变量及数据类型用法原理汇总
2020/08/06 Python
京东国际站:JOYBUY
2017/11/23 全球购物
Weblogic和WebSphere不同特点
2012/05/09 面试题
幼儿园老师辞职信
2014/01/20 职场文书
致长跑运动员加油稿
2014/02/20 职场文书
环保建议书
2014/03/12 职场文书
幼儿园户外活动总结
2014/07/04 职场文书
会议接待欢迎词范文
2015/01/26 职场文书
MySQL主从复制断开的常用修复方法
2021/04/07 MySQL
Python如何识别银行卡卡号?
2021/06/10 Python