亚洲精品久久久中文字幕-亚洲精品久久片久久-亚洲精品久久青草-亚洲精品久久婷婷爱久久婷婷-亚洲精品久久午夜香蕉

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

在django admin中配置搜索域是一個(gè)外鍵時(shí)的處理方法

瀏覽:2日期:2024-10-03 10:31:58

python 2.7.11

django 1.8.4

錯(cuò)誤內(nèi)容:related Field has invalid lookup: icontains

我原來(lái)默認(rèn)認(rèn)為在處理外鍵搜索的時(shí)候,django會(huì)自動(dòng)將該外鍵的行數(shù)據(jù)以str()化之后進(jìn)行搜索,但其實(shí)并不是這樣的,如果將外鍵加入到搜索域中,需要明確寫出來(lái)。

這個(gè)是我從網(wǎng)上查到的解決方案,測(cè)試可用,如下:

models.py 文件

# coding:utf8from django.db import modelsclass 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: utf8from django.contrib import adminfrom django import formsfrom .models import Categoryclass CategoryAdmin(admin.ModelAdmin): search_fileds = (’book__name’, ’book__title’, ’book__price’, ’category’) # 設(shè)置搜索欄范圍,如果有外鍵,要注明外鍵的哪個(gè)字段,雙下劃線 list_display = (’book’, ’category’) # 在頁(yè)面上顯示的字段,若不設(shè)置則顯示 models.py 中 __unicode__(self) 中所返回的值 list_display_links = (’category’) # 設(shè)置頁(yè)面上哪個(gè)字段可單擊進(jìn)入詳細(xì)頁(yè)面 fields = (’category’, ’book’) # 設(shè)置添加/修改詳細(xì)信息時(shí),哪些字段顯示,在這里 remark 字段將不顯示 admin.site.register(Category, CategoryAdmin)

[ 說(shuō)明 ]

在使用 Django admin 系統(tǒng)中的搜索時(shí)可能會(huì)出現(xiàn)“related Field has invalid lookup: icontains”錯(cuò)誤,主要原因是外鍵查詢是需要指定相應(yīng)的字段的。

外鍵不應(yīng)該只是一個(gè)model,而該是另一個(gè)表的明確的一個(gè)字段。

所以我們需要指定特定的字段 '本表外鍵字段__外鍵所在表需查詢字段'。

補(bǔ)充知識(shí):Django的model中使用外鍵,但在頁(yè)面上顯示的是xxx_object?

在Django中定義了如下A,B兩個(gè)模型:

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

注:我在測(cè)試環(huán)境中使用的是python2.7,一切操作做完之后,部署到云服務(wù)器上后,就在后臺(tái)管理系統(tǒng)中看到B的屬性一欄中f顯示為A_Object,并沒有顯示A的屬性——name的值。

究其緣由,發(fā)現(xiàn)我的云服務(wù)器上用的是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

當(dāng)然,如果使用的版本是python3.x,為了更好地兼容python2.x,可以使用@python_2_unicode_compatible裝飾器來(lái)使python2.x想python3.x一樣處理Unicode字符。

from django.utils.encoding import python_2_unicode_compatible @python_2_unicode_compatibleclass A: name=models.CharField(max_length=15) def __str__(self): return self.name @python_2_unicode_compatibleclass B: name=models.CharField(max_length=15) f=models.ForeignKey(A,on_delete=models.DO_NOTHING) def __str__(self): return self.name

以上這篇在django admin中配置搜索域是一個(gè)外鍵時(shí)的處理方法就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持好吧啦網(wǎng)。

標(biāo)簽: Django
相關(guān)文章:
主站蜘蛛池模板: 久久本道久久综合伊人 | 欧美日韩亚洲国内综合网香蕉 | 国内外成人在线视频 | 亚洲综合日韩欧美一区二区三 | 国产免费一区2区3区4区 | 亚洲色图吧 | 九九视频高清视频免费观看 | 欧美在线一区二区三区欧美 | 国产色婷婷精品免费视频 | 精品一区中文字幕 | 97免费在线视频 | 国产爆操 | 精品久久九九 | 国产一级做性视频 | 国产一级精品视频 | 免费观看亚洲 | 九九精品免费视频 | aiai视频在线观看 | 国产伦精品一区二区三区免费 | 又大又紧又硬又湿a视频 | 香蕉久久一区二区三区 | 免费一级a毛片在线 | 国产精品爱久久久久久久9999 | 亚洲欧美日韩国产精品 | 高清国产一区 | 国产精品高清在线观看 | 爱爱www在线观看视频高清 | 国产亚洲一区二区麻豆 | 激情亚洲 | 国产挤奶水在线视频播放 | 看美女黄色片 | 国产午夜大片 | 欧美大黄 | 亚洲国产精品v在线播放 | 草逼网站视频 | 久久毛片免费看一区二区三区 | 成人在色线视频在线观看免费大全 | 亚洲无色 | 国产在线成人一区二区 | 国产在线精品成人一区二区三区 | 久久精品亚洲99一区二区 |