Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django管理员搜索和编辑外部字段_Python_Django_Django Admin - Fatal编程技术网

Python Django管理员搜索和编辑外部字段

Python Django管理员搜索和编辑外部字段,python,django,django-admin,Python,Django,Django Admin,我有一个关于Django管理员的两部分问题 首先,我有一个Django模型Classified,它有一个来自另一个表Address的外键字段。在设置数据时,我对任何字段都没有问题,所有字段都正确保存 但是,如果我想编辑Classified中条目中的外部字段,它不会在字段中显示旧的/现有的数据。相反,它在打开的弹出窗口中显示空字段 如何让字段在单击+时显示现有数据,以便编辑正确的信息 其次,我肯定在Django Admin中看到过搜索字段。我弄错了吗?我有没有办法在管理面板中实现搜索?我有超过20

我有一个关于Django管理员的两部分问题

首先,我有一个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)
地址

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)

+
的意思就是-添加相关对象的新实例,并将您正在编辑的对象与之关联。因为您要添加一个新对象,所以开始时它将为空。如果您希望能够从另一个对象的管理员处编辑现有的相关对象,则需要使用

在你的应用程序的
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',
    ]
...
注意最后一条中的双下划线。这意味着您可以根据相关对象字段中的值进行搜索


编辑:是正确的,因为你的外键关系是错误的,这样做是错误的-你问题中显示的模型
分类
将是内联的,而
地址
是主要的模型。

这样做会给我一个
没有外键的
错误。编辑:我认为这也是因为
地址
有外键。似乎没有解决这个问题的办法,对吧?我将把模型代码发布到原始问题中,这应该不是问题。我有一个类似的模型在生产中运行得很好。取出内联线,查看搜索是否有效或抛出任何启发性错误。删除内联线后,搜索工作正常,没有错误。抱歉,我不确定我是否可以进一步提供帮助。您的模型不仅与我的工作模型几乎相同,实际上与django inlines文档中的模型非常相似!