Django - 搜索相关字段

anh*_*ran 11 django django-models django-admin

我的模特:

class Contact(models.Model):
    first_name = models.CharField(_("First name"), max_length=30, )
    last_name = models.CharField(_("Last name"), max_length=30, )
    email = models.EmailField(_("Email"), blank=True, max_length=75)

class PhoneNumber(models.Model):
    contact = models.ForeignKey(Contact)
    phone = models.CharField(_("Phone Number"), blank=True, max_length=30, )
    primary = models.BooleanField(_("Primary"), default=False)
Run Code Online (Sandbox Code Playgroud)

我的admin.py:

class ContactOptions(AutocompleteAdmin):
    list_display = ('last_name', 'first_name')
    ordering = ['last_name']
    search_fields = ('first_name', 'last_name', 'email')
    related_search_fields = { """??? I want to search the Phone Numbers ???""" }
Run Code Online (Sandbox Code Playgroud)

如何在Django管理员中搜索电话号码?请给出一些代码.非常感谢你!

els*_*dek 10

为了防止有人提出这个问题,在Django 1.6中,搜索反向关系确实是可能的.

在手机型号中,将related_name ="phonesList"添加到联系人字段

contact = models.ForeignKey(Contact, related_name="phonesList")
Run Code Online (Sandbox Code Playgroud)

现在在search_field中你可以使用双非意外来从conatct转到这样的手机: phonesList__phone

search_fields = ('first_name', 'last_name', 'email','phonesList__phone')
Run Code Online (Sandbox Code Playgroud)


Ste*_*lim 9

更新:这个答案是过时的,看到答案从elsadek代替


您要求能够遵循反向关系(即,从PhoneNumber返回到Contact),但我不相信__跨表的双下划线技巧可以在这里工作.

如果您的联系人拥有PhoneNumber模型的密钥而不是当前设置:

class Contact(models.Model):
    ...
    phone = models.ForeignKey(PhoneNumber)
Run Code Online (Sandbox Code Playgroud)

然后在admin配置中你可以这样做:

search_fields = ('first_name', 'last_name', 'email', 'phone__phone')
Run Code Online (Sandbox Code Playgroud)

  • 请不要碰我的模特:( (3认同)
  • 在这种情况下,您无法在管理员中执行此操作. (2认同)