在Django Admin中配置搜索域是一个外键时,需要考虑到外键关联的模型中的属性如何通过搜索框进行搜索。本文将详细介绍如何在Django Admin中对外键进行搜索,并给出示例说明。
步骤一:在Admin中定义一个Search Field
首先,我们需要在Admin的类中定义一个search_fields属性,来说明我们想要在哪些字段中搜索。
例如,对于一个名为Book
的模型,其中包含一个外键publisher
,我们可以在BookAdmin
中添加如下定义:
class BookAdmin(admin.ModelAdmin):
search_fields = ['title', 'publisher__name']
在上述代码中,我们将title
和publisher__name
添加到BookAdmin
的search_fields
中。注意到publisher__name
中使用了双下划线(__),表示我们想要搜索publisher
模型中的name
字段。
步骤二:配置外键模型中的search_fields
如果我们想要在外键模型中搜索特定字段,可以在引用该模型的Admin类中进行配置。
例如,对于上述示例中的Book
模型,假设我们想要在Publisher
模型中搜索country
字段,我们可以在PublisherAdmin
类中添加如下定义:
class PublisherAdmin(admin.ModelAdmin):
search_fields = ['name', 'country']
在上述代码中,我们将name
和country
添加到PublisherAdmin
的search_fields
中,这样用户在BookAdmin
中搜索publisher__country
时就可以进行正常的搜索了。
示例一:搜索Author模型中的一个字段
假设我们有一个名为Author
的模型,该模型的结构如下所示:
class Author(models.Model):
name = models.CharField(max_length=50)
email = models.EmailField()
我们有另一个名为Book
的模型,该模型有一个外键author
,引用了Author
模型:
class Book(models.Model):
title = models.CharField(max_length=100)
author = models.ForeignKey(Author, on_delete=models.CASCADE)
publish_date = models.DateField()
def __str__(self):
return self.title
现在我们想要在Django Admin中可以通过Author
的name
字段进行搜索,以方便用户快速找到所需的书。
我们需要在BookAdmin
类中增加一个search_fields
属性,如下所示:
class BookAdmin(admin.ModelAdmin):
search_fields = ['title', 'author__name']
在上述代码中,我们将title
和author__name
添加到BookAdmin
的search_fields
中。注意到author__name
中使用了双下划线(__),表示我们想要搜索author
模型中的name
字段。
示例二:搜索Publisher模型中的一个字段
假设我们有一个名为Publisher
的模型,该模型的结构如下所示:
class Publisher(models.Model):
name = models.CharField(max_length=50)
country = models.CharField(max_length=50)
def __str__(self):
return self.name
我们有另一个名为Book
的模型,该模型有一个外键publisher
,引用了Publisher
模型:
class Book(models.Model):
title = models.CharField(max_length=100)
publisher = models.ForeignKey(Publisher, on_delete=models.CASCADE)
publish_date = models.DateField()
def __str__(self):
return self.title
现在我们想要在Django Admin中可以通过Publisher
的country
字段进行搜索,以方便用户快速找到所需的书。
我们需要在PublisherAdmin
类中增加一个search_fields
属性,如下所示:
class PublisherAdmin(admin.ModelAdmin):
search_fields = ['name', 'country']
在上述代码中,我们将name
和country
添加到PublisherAdmin
的search_fields
中,这样用户在BookAdmin
中搜索publisher__country
时就可以进行正常的搜索了。
以上就是在Django Admin中配置搜索域是一个外键时的处理方法的完整攻略,希望能对大家有所帮助。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:在django admin中配置搜索域是一个外键时的处理方法 - Python技术站