在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入门之三角函数atan2()函数详解
Nov 08 Python
Django 实现下载文件功能的示例
Mar 06 Python
Python学习小技巧总结
Jun 10 Python
Python命名空间的本质和加载顺序
Dec 17 Python
Python基于机器学习方法实现的电影推荐系统实例详解
Jun 25 Python
python 列表转为字典的两个小方法(小结)
Jun 28 Python
PyTorch之图像和Tensor填充的实例
Aug 18 Python
Python3 sys.argv[ ]用法详解
Oct 24 Python
浅析Python数字类型和字符串类型的内置方法
Dec 22 Python
Python实现寻找回文数字过程解析
Jun 09 Python
使用Keras实现简单线性回归模型操作
Jun 12 Python
python中执行smtplib失败的处理方法
Jul 01 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 MSSQL 存储过程的方法
2008/12/24 PHP
php 图片上添加透明度渐变的效果
2009/06/29 PHP
nginx+thinkphp下解决不支持pathinfo模式
2015/07/01 PHP
让广告代码不再影响你的网页加载速度
2006/07/07 Javascript
基于jquery实现的服务器验证控件的启用和禁用代码
2010/04/27 Javascript
javascript 文章截取部分无损html显示实现代码
2010/05/04 Javascript
纯js网页画板(Graphics)类简介及实现代码
2012/12/24 Javascript
javaScript(JS)替换节点实现思路介绍
2013/04/17 Javascript
简单谈谈JavaScript的同步与异步
2015/12/31 Javascript
jQuery CSS3相结合实现时钟插件
2016/01/08 Javascript
JavaScript的设计模式经典之代理模式
2016/02/24 Javascript
js时间比较 js计算时间差的简单实现方法
2016/08/26 Javascript
详解vue服务端渲染(SSR)初探
2017/06/19 Javascript
jQuery滚动条美化插件nicescroll简单用法示例
2018/04/18 jQuery
js中call()和apply()改变指针问题的讲解
2019/01/17 Javascript
一文看懂如何简单实现节流函数和防抖函数
2019/09/05 Javascript
JavaScript 声明私有变量的两种方式
2021/02/05 Javascript
简单使用Python自动生成文章
2014/12/25 Python
python编写简单爬虫资料汇总
2016/03/22 Python
python 读写、创建 文件的方法(必看)
2016/09/12 Python
python通过伪装头部数据抵抗反爬虫的实例
2018/05/07 Python
python如何制作英文字典
2019/06/25 Python
Python 实现黑客帝国中的字符雨的示例代码
2020/02/20 Python
Python学习笔记之装饰器
2020/08/06 Python
python实现图像高斯金字塔的示例代码
2020/12/11 Python
印度领先的在线时尚商店:Koovs
2016/08/28 全球购物
Habitat家居英国官方网站:沙发、家具、照明、厨房和户外
2019/12/12 全球购物
在职人员函授期间自我评价分享
2013/11/08 职场文书
结婚典礼证婚词
2014/01/11 职场文书
销售员岗位职责范本
2014/02/03 职场文书
经济贸易系毕业生求职信
2014/05/31 职场文书
最新离婚协议书范本
2014/08/19 职场文书
酒店财务部岗位职责
2015/04/14 职场文书
简单的辞职信范文(2016最新版)
2015/05/12 职场文书
《金钱的魔力》教学反思
2016/02/20 职场文书
Linux系统下MySQL配置主从分离的步骤
2022/03/21 MySQL