在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处理JSON时的值报错及编码报错的两则解决实录
Jun 26 Python
利用Python循环(包括while&for)各种打印九九乘法表的实例
Nov 06 Python
Python实现简单网页图片抓取完整代码实例
Dec 15 Python
解决python爬虫中有中文的url问题
May 11 Python
Python 虚拟空间的使用代码详解
Jun 10 Python
Python中变量的输入输出实例代码详解
Jul 28 Python
Python+OpenCV实现图像的全景拼接
Mar 05 Python
Python HTTP下载文件并显示下载进度条功能的实现
Apr 02 Python
如何在django中运行scrapy框架
Apr 22 Python
Python API 操作Hadoop hdfs详解
Jun 06 Python
Django缓存Cache使用详解
Nov 30 Python
Python爬虫之Selenium库的使用方法
Jan 03 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 在线翻译函数代码
2009/05/07 PHP
php过滤敏感词的示例
2014/03/31 PHP
php实现与erlang的二进制通讯实例解析
2014/07/23 PHP
PHP session文件独占锁引起阻塞问题解决方法
2015/05/12 PHP
session 加入redis的实现代码
2016/07/15 PHP
PHP执行shell脚本运行程序不产生core文件的方法
2016/12/28 PHP
phpinfo的知识点总结
2019/10/10 PHP
js Flash插入函数免激活代码
2009/03/31 Javascript
JQuery textlimit 显示用户输入的字符数 限制用户输入的字符数
2009/05/14 Javascript
javascript attachEvent绑定多个事件执行顺序问题
2010/10/20 Javascript
基于jquery的点击链接插入链接内容的代码
2012/07/31 Javascript
用javascript删除当前行,添加行(示例代码)
2013/11/25 Javascript
js使用正则实现ReplaceAll全部替换的方法
2014/07/18 Javascript
简化版手机端照片预览组件
2015/04/13 Javascript
JS实现选择TextArea内文本的方法
2015/08/03 Javascript
javascript瀑布流布局实现方法详解
2016/02/17 Javascript
jQuery的层级查找方式分析
2016/06/16 Javascript
简单实现js悬浮导航效果
2017/02/05 Javascript
vuex中的 mapState,mapGetters,mapActions,mapMutations 的使用
2018/04/13 Javascript
给localStorage设置一个过期时间的方法分享
2018/11/06 Javascript
小程序调用微信支付的方法
2019/09/26 Javascript
使用Webpack提升Vue.js应用程序的4种方法(翻译)
2019/10/09 Javascript
js实现开关灯效果
2020/03/30 Javascript
Django admin美化插件suit使用示例
2017/12/12 Python
python3 判断列表是一个空列表的方法
2018/05/04 Python
python中使用iterrows()对dataframe进行遍历的实例
2018/06/09 Python
可能是最全面的 Python 字符串拼接总结【收藏】
2018/07/09 Python
Python3 关于pycharm自动导入包快捷设置的方法
2019/01/16 Python
使用Python画出小人发射爱心的代码
2019/11/23 Python
python3实现简单飞机大战
2020/11/29 Python
使用索引(Index)有哪些需要考虑的因素
2016/10/19 面试题
JAVA招聘远程笔试题
2015/07/23 面试题
《陶罐和铁罐》教学反思
2014/02/19 职场文书
详解nodejs内置模块
2021/05/06 NodeJs
python数据可视化使用pyfinance分析证券收益示例详解
2021/11/20 Python
直播实况, OMG破敌三路五十分钟大战神技局摩托车
2022/04/01 DOTA