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

时间:2014-08-22 06:21:46

标签: python django django-admin

我有两个关于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 个答案:

答案 0 :(得分:1)

+就是这样 - 添加相关对象的新实例,并将您正在编辑的对象与之关联起来。因为您要添加一个新对象,所以它将是空白的。如果您希望能够编辑其他对象管理员的现有相关对象,则需要使用inlines

在你的应用中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',
    ]
...

请注意最后一个中的双下划线。这意味着您可以根据相关对象字段中的值进行搜索。

编辑:This answer是正确的,因为你的外键关系是错误的方式这样做 - 你的问题Classified中显示的模型将是内联和Address主要模式。