在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  连接字符串(join %)
Sep 06 Python
python实现将pvr格式转换成pvr.ccz的方法
Apr 28 Python
从零开始学Python第八周:详解网络编程基础(socket)
Dec 14 Python
python 全文检索引擎详解
Apr 25 Python
python之文件读取一行一行的方法
Jul 12 Python
Python将8位的图片转为24位的图片实现方法
Oct 24 Python
Python从数据库读取大量数据批量写入文件的方法
Dec 10 Python
Python中拆分字符串的操作方法
Jul 23 Python
python中栈的原理及实现方法示例
Nov 27 Python
python Manager 之dict KeyError问题的解决
Dec 21 Python
通过实例了解python__slots__使用方法
Sep 14 Python
Python还能这么玩之只用30行代码从excel提取个人值班表
Jun 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的图形函数中显示汉字
2006/10/09 PHP
php 解决旧系统 查出所有数据分页的类
2012/08/27 PHP
PHP仿博客园 个人博客(2) 数据库增添改删
2013/07/05 PHP
thinkphp实现分页显示功能
2016/12/03 PHP
经常用到的JavasScript事件的翻译
2007/04/09 Javascript
几款极品的javascript压缩混淆工具
2007/05/16 Javascript
简短几句 通俗解释javascript的闭包
2011/01/17 Javascript
JavaScript高级程序设计(第3版)学习笔记4 js运算符和操作符
2012/10/11 Javascript
HTML5之lang属性与dir属性的详解
2013/06/19 Javascript
Javascript delete 引用类型对象
2013/11/01 Javascript
jquery如何把数组变为字符串传到服务端并处理
2014/04/30 Javascript
jQuery事件之键盘事件(ctrl+Enter回车键提交表单等)
2014/05/11 Javascript
jQuery实现流动虚线框的方法
2015/01/29 Javascript
jQuery中animate用法实例分析
2015/03/09 Javascript
简单分析javascript面向对象与原型
2015/05/21 Javascript
jQuery结合AJAX之在页面滚动时从服务器加载数据
2015/06/30 Javascript
创建自己的jquery表格插件
2015/11/25 Javascript
三种AngularJS中获取数据源的方式
2016/02/02 Javascript
layui表格实现代码
2017/05/20 Javascript
React Native 搭建开发环境的方法步骤
2017/10/30 Javascript
JavaScript前后端JSON使用方法教程
2020/11/23 Javascript
python实现根据图标提取分类应用程序实例
2014/09/28 Python
python修改操作系统时间的方法
2015/05/18 Python
python re正则匹配网页中图片url地址的方法
2018/12/20 Python
python实现杨氏矩阵查找
2019/03/02 Python
python实现scrapy爬虫每天定时抓取数据的示例代码
2021/01/27 Python
Dr. Martens马汀博士澳大利亚官网:马丁靴鼻祖
2019/07/02 全球购物
资源环境与城市管理专业推荐信
2013/11/30 职场文书
公司业务员岗位职责
2014/03/18 职场文书
酒后驾车标语
2014/06/30 职场文书
2014年校务公开工作总结
2014/12/18 职场文书
大学生心理健康活动总结
2015/05/08 职场文书
街道办残联2016年助残日活动总结
2016/04/01 职场文书
python实现web邮箱扫描的示例(附源码)
2021/03/30 Python
Mysql 如何实现多张无关联表查询数据并分页
2021/06/05 MySQL
聊聊Python String型列表求最值的问题
2022/01/18 Python