亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

在django admin中配置搜索域是一個外鍵時怎么辦

發布時間:2020-07-23 10:58:45 來源:億速云 閱讀:156 作者:小豬 欄目:開發技術

這篇文章主要為大家展示了在django admin中配置搜索域是一個外鍵時怎么辦,內容簡而易懂,希望大家可以學習一下,學習完之后肯定會有收獲的,下面讓小編帶大家一起來看看吧。

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中配置搜索域是一個外鍵時怎么辦的內容,如果你們有學習到知識或者技能,可以把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

介休市| 城固县| 湘乡市| 横山县| 安阳市| 马公市| 如皋市| 左贡县| 洮南市| 河津市| 张家界市| 靖宇县| 蓝山县| 大港区| 怀远县| 永德县| 宁明县| 泸西县| 巩义市| 凤阳县| 齐齐哈尔市| 顺平县| 久治县| 巩留县| 五指山市| 连平县| 昌平区| 册亨县| 瑞安市| 阿克陶县| 西乌| 邹城市| 张家口市| 合阳县| 泉州市| 顺平县| 郴州市| 柞水县| 邢台市| 铁力市| 高密市|