在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基于windows平台锁定键盘输入的方法
Mar 05 Python
python bottle框架支持jquery ajax的RESTful风格的PUT和DELETE方法
May 24 Python
python生成tensorflow输入输出的图像格式的方法
Feb 12 Python
删除DataFrame中值全为NaN或者包含有NaN的列或行方法
Nov 06 Python
Python TCP通信客户端服务端代码实例
Nov 21 Python
Python netmiko模块的使用
Feb 14 Python
Python函数递归调用实现原理实例解析
Aug 11 Python
浅谈Python 钉钉报警必备知识系统讲解
Aug 17 Python
python 爬取免费简历模板网站的示例
Sep 27 Python
Python-split()函数实例用法讲解
Dec 18 Python
python requests库的使用
Jan 06 Python
使用Python webdriver图书馆抢座自动预约的正确方法
Mar 04 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中的时间处理
2006/10/09 PHP
php使用array_rand()函数从数组中随机选择一个或多个元素
2014/04/28 PHP
php实现递归的三种基本方式
2020/07/04 PHP
php实现单笔转账到支付宝功能
2018/10/09 PHP
文字幻灯片
2006/06/26 Javascript
jQuery中jqGrid分页实现代码
2011/11/04 Javascript
jquery中对于批量deferred的处理方法
2014/01/22 Javascript
jquery实现带二级菜单的导航示例
2014/04/28 Javascript
关于javascript模块加载技术的一些思考
2014/11/28 Javascript
Javascript实现可旋转的圆圈实例代码
2015/08/04 Javascript
JS 数字转换为大写金额的简单实例
2016/08/04 Javascript
jQuery在ie6下无法设置select选中的解决方法详解
2016/09/20 Javascript
jQuery中的AjaxSubmit使用讲解
2016/09/25 Javascript
AngularJS模糊查询功能实现代码(过滤内容下拉菜单排序过滤敏感字符验证判断后添加表格信息)
2017/10/24 Javascript
Angular2开发环境搭建教程之VS Code
2017/12/15 Javascript
深入理解 webpack 文件打包机制(小结)
2018/01/08 Javascript
Vue动态组件与异步组件实例详解
2019/02/23 Javascript
微信小程序mpvue点击按钮获取button值的方法
2019/05/29 Javascript
基于Web Audio API实现音频可视化效果
2020/06/12 Javascript
python实现ID3决策树算法
2018/08/29 Python
Python参数解析模块sys、getopt、argparse使用与对比分析
2019/04/02 Python
pandas 数据结构之Series的使用方法
2019/06/21 Python
用Python获取摄像头并实时控制人脸的实现示例
2019/07/11 Python
Python Lambda函数使用总结详解
2019/12/11 Python
pytorch对梯度进行可视化进行梯度检查教程
2020/02/04 Python
python 下载m3u8视频的示例代码
2020/11/11 Python
python开发一个解析protobuf文件的简单编译器
2020/11/17 Python
Python结合百度语音识别实现实时翻译软件的实现
2021/01/18 Python
canvas三角函数模拟水波效果的示例代码
2018/07/03 HTML / CSS
欧铁通票官方在线销售网站:Eurail.com
2017/10/14 全球购物
缅怀革命先烈演讲稿
2014/05/14 职场文书
餐饮周年庆活动方案
2014/08/14 职场文书
2014法院四风问题对照检查材料思想汇报
2014/10/04 职场文书
建议书格式
2015/02/04 职场文书
2015年学校教务处工作总结
2015/05/11 职场文书
2016年秋季新学期致辞
2015/07/30 职场文书