Django管理后台搜索和编辑外键字段
我有一个关于Django Admin的两个问题。
首先,我有一个Django模型叫做Classified
,它有一个外键字段指向另一个表Address
。在设置数据时,我对任何字段都没有问题,所有字段都能正确保存。
但是,如果我想编辑Classified
中的外键字段,弹出的窗口里并不会显示旧的数据,而是显示空白的字段。
我该怎么做才能在点击+
时让字段显示已有的数据,这样我才能编辑正确的信息呢?
其次,我记得在Django Admin里见过搜索字段。我记错了吗?有没有办法让我在管理面板中实现搜索功能?我有超过200万条记录需要不时更新或删除。手动翻遍所有页面去删除或编辑这些记录实在是太麻烦了。
添加模型代码:
Classified
class Classified(models.Model):
id = models.AutoField(primary_key=True)
name = models.CharField(max_length=256)
contact_person = models.CharField(max_length=300, blank=True)
email = models.CharField(max_length=100, blank=True)
address = models.ForeignKey(Address)
subcategory = models.ForeignKey(Subcategory)
Address
class Address(models.Model):
id = models.AutoField(primary_key=True)
build_add = models.CharField(max_length=255)
street_add = models.CharField(max_length=255)
area = models.CharField(max_length=255)
city = models.ForeignKey(Cities)
1 个回答
2
这里的 +
就是说,添加一个新的相关对象,并把你正在编辑的对象和这个新对象关联起来。因为你是添加一个新对象,所以一开始它是空的。如果你想在另一个对象的管理界面中编辑已经存在的相关对象,你需要使用 内联模型。
在你应用的 admin.py
文件中,可以写成这样:
from django.contrib import admin
from yourapp.models import Address, Classified
class AddressInline(admin.TabularInline):
model = Address
class ClassifiedAdmin(admin.ModelAdmin):
inlines = [AddressInline,]
admin.site.register(Classified, ClassifiedAdmin)
从这里添加搜索功能非常简单。
...
class ClassifiedAdmin(admin.ModelAdmin):
inlines = [AddressInline,]
search_fields = [
'field_you_want_to_search',
'another_field',
'address__field_on_relation',
]
...
注意最后一个例子中的双下划线。这意味着你可以根据相关对象字段中的值进行搜索。
补充说明:这个回答是对的,你的外键关系设置反了,按照你问题中展示的模型,Classified
应该是内联模型,而 Address
是主模型。