在django admin中配置搜索域是一个外键时的处理方法
作者:davidsu33 发布时间:2021-02-20 18:48:26
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
来源:https://blog.csdn.net/davidsu33/article/details/51672163
猜你喜欢
- 今天在一个QQ群中看到有人在问一个进度条的实现方式,当时因为工作时间,需求相对也比较紧,只是简单的说了一下可以通过CSS的边框属性和背景属性
- 目录查找和修复数据表冲突更新索引统计查找和修复数据表冲突数据表最糟糕的事情就是发生冲突。使用MyISAM存储引擎时,通常因为崩溃导致冲突。然
- 1. 首先VC++的DLL的导出函数定义成标准C的导出函数: #ifdef LRDLLTEST_EXPORTS #define LRDLLT
- Create a Simple API Using Django REST Framework in PythonWHAT IS AN AP
- 在学会了抓包,接口请求(如requests库)和Selenium的一些操作方法后,基本上就可以编写爬虫,爬取绝大多数网站的内容。在爬虫领域,
- 方法一 :这个是我在站长工具的查询页面使用的防止频繁查询,刷新页面的代码!下面函数的功能是3秒内查询页面即刷新了页面,超过2次就提示!sea
- scrapy框架之增量式爬虫一 、增量式爬虫什么时候使用增量式爬虫:增量式爬虫:需求 当我们浏览一些网站会发现,某些网站定时的会在原有的基础
- 本文实例讲述了php实现的一段简单概率相关代码。分享给大家供大家参考,具体如下:<?phpfor($i=1;$i<100000;
- 我一直都不喜欢在访问数据库时采用拼接SQL的方法,原因有以下几点: 1. 不安全:有被SQL注入的风险。 2. 可能会影响性能:每条SQL语
- 在使用Keras搭建验证码识别模型时,需要大量的验证码图片。在这里,使用captcha模块生成验证码图片,验证码图片名称为验证码上显示的字符
- 安装包 PyCharm笔者使用PyCharm2018.3.2,请根据机器是64位还是32位来选择对应的PyCharm版本。(相信绝大部分人都
- question: Django中对数据库的调用非常的隐蔽,在各种复杂的模块互相拼接继承中很难发现获取数据库内容的部分来,开始试图理解一下下
- 生成.bmp格式的文件.bmp格式的图片是未压缩的图片,相比于.raw格式,需要加上头文件。下面以大小为M*N的图片为例,说明头文件格式和内
- 比如,若要将某个String对象s从gbk内码转换为UTF-8,可以如下操作 s.decode('gbk').encode(
- 1. floor 函数1.1 floor 函数的作用floor() 函数的作用是返回小于等于该值的最大整数举例说明:select floor
- 首先我们来看个示例:<form name="buyerForm" method="post"
- 前言本文的操作环境:ubuntu,Python2.7,采用的是Pycharm进行代码编辑,个人很喜欢它的代码自动补齐功能。示例图如上图,我们
- 前言:协程(coroutine)是 Go 语言最大的特色之一,goroutine 的实现其实是通过协程。协程的概念协程一词最早出现在 196
- 一个转换程序,简单的把DNA序列中的A转变成T,第一种情况没有使用私有变量。#!/bin/perl#下面是一段DNA序列 $DN
- 引子平常的文本处理工作中,我经常会遇到这么一种情况:用python判断一个string是否包含一个list里的元素。这时候使用python的