1
0
mirror of https://github.com/peeringdb/peeringdb.git synced 2024-05-11 05:55:09 +00:00

implement additional autocomplete fields (#667, #597)

This commit is contained in:
Stefan Pratter
2020-04-10 15:00:27 +00:00
parent d6824d2650
commit 1ffaae4148
2 changed files with 65 additions and 11 deletions

View File

@@ -525,15 +525,10 @@ class UserOrgAffiliationRequestInline(admin.TabularInline):
extra = 0
form = UserOrgAffiliationRequestInlineForm
verbose_name_plural = _("User is looking to be affiliated to these Organizations")
def formfield_for_foreignkey(self, db_field, request, **kwargs):
if db_field.name == "org":
kwargs["queryset"] = Organization.handleref.filter(status="ok").order_by(
"name"
)
return super(UserOrgAffiliationRequestInline, self).formfield_for_foreignkey(
db_field, request, **kwargs
)
raw_id_fields = ("org",)
autocomplete_lookup_fields = {
"fk": ["org"],
}
class InternetExchangeAdminForm(StatusForm):
@@ -776,6 +771,10 @@ class PartnershipAdmin(admin.ModelAdmin):
list_display = ("org_name", "level", "status")
readonly_fields = ("status", "org_name")
form = PartnershipAdminForm
raw_id_fields = ("org",)
autocomplete_lookup_fields = {
"fk": ["org"],
}
def org_name(self, obj):
if not obj.org:
@@ -960,6 +959,12 @@ class IXLanPrefixAdmin(SoftDeleteAdmin):
list_filter = (StatusFilter,)
form = StatusForm
raw_id_fields = ("ixlan",)
autocomplete_lookup_fields = {
"fk": ["ixlan"],
}
def ix(self, obj):
return obj.ixlan.ix
@@ -990,9 +995,9 @@ class NetworkIXLanAdmin(SoftDeleteAdmin):
list_filter = (StatusFilter,)
form = StatusForm
raw_id_fields = ("network",)
raw_id_fields = ("network","ixlan")
autocomplete_lookup_fields = {
"fk": ["network",],
"fk": ["network","ixlan"],
}
def ix(self, obj):
@@ -1050,6 +1055,11 @@ class VerificationQueueAdmin(ModelAdminWithUrlActions):
readonly_fields = ("created", "view", "extra")
search_fields = ("item",)
raw_id_fields = ("user",)
autocomplete_lookup_fields = {
"fk": ["user"],
}
def get_search_results(self, request, queryset, search_term):
# queryset, use_distinct = super(VerificationQueueAdmin, self).get_search_results(request, queryset, search_term)
if not search_term or search_term == "":

View File

@@ -538,6 +538,18 @@ class Organization(pdb_models.OrganizationBase):
def __unicode__(self):
return self.name
def related_label(self):
"""
Used by grappelli autocomplete for representation
Since grappelli doesnt easily allow us to filter status
during autocomplete lookup, we make sure the objects
are marked accordingly in the result
"""
if self.status == "deleted":
return "[DELETED] {}".format(self)
return "{}".format(self)
@property
def search_result_name(self):
"""
@@ -1628,6 +1640,22 @@ class IXLan(pdb_models.IXLanBase):
# return Network.handleref.filter(id__in=[i.network_id for i in
# q]).filter(status="ok")
@staticmethod
def autocomplete_search_fields():
"""
Used by grappelli autocomplete to determine what
fields to search in
"""
return ("ix__name__icontains",)
def related_label(self):
"""
Used by grappelli autocomplete for representation
"""
return "{} IXLan ({})".format(self.ix.name, self.id)
def nsp_has_perms_PUT(self, user, request):
return validate_PUT_ownership(user, self, request.data, ["ix"])
@@ -2883,6 +2911,22 @@ class User(AbstractBaseUser, PermissionsMixin):
group = Group.objects.get(id=settings.USER_GROUP_ID)
return group in self.groups.all()
@staticmethod
def autocomplete_search_fields():
"""
Used by grappelli autocomplete to determine what
fields to search in
"""
return ("username__icontains", "email__icontains", "last_name__icontains")
def related_label(self):
"""
Used by grappelli autocomplete for representation
"""
return "{} <{}> ({})".format(self.username, self.email, self.id)
def flush_affiliation_requests(self):
"""
Removes all user -> org affiliation requests for this user