prompt: We are currently solving the following issue within our repository. Here is the issue text:
  --- BEGIN ISSUE ---
  Improve admin page
  - [x] Add custom Admin models with `list_display`, `display_filter` (for example, by network), `ordering` and `search_fields`: https://docs.djangoproject.com/en/3.2/ref/contrib/admin/
  - [x] Use admin decorator https://docs.djangoproject.com/en/3.2/ref/contrib/admin/#the-register-decorator
  
  --- END ISSUE ---
  
  Below are some code segments, each from a relevant file. One or more of these files may contain bugs.
  --- BEGIN FILES ---
  Path: `src/safe_apps/admin.py`
  Content:
  ```
  1 from django.contrib import admin
  2 
  3 from .models import SafeApp, Provider
  4 
  5 models = [SafeApp, Provider]
  6 admin.site.register(models)
  7
  ```
  --- END FILES ---
  
  Please first localize the bug based on the issue statement, and then generate a patch according to the `git diff` format fenced by three backticks.
  
  Here is an example:
  
  ```diff
  diff --git a/examples/server_async.py b/examples/server_async.py
  --- a/examples/server_async.py
  +++ b/examples/server_async.py
  @@ -313,4 +313,4 @@
   
   
   if __name__ == "__main__":
  -    asyncio.run(run_async_server("."), debug=True)
  +    asyncio.run(run_async_server(), debug=True)
  diff --git a/examples/server_sync.py b/examples/server_sync.py
  --- a/examples/server_sync.py
  +++ b/examples/server_sync.py
  @@ -313,5 +313,5 @@
   
   
   if __name__ == "__main__":
  -    server = run_sync_server(".")
  +    server = run_sync_server()
       server.shutdown()
  
  ```
  
golden_diff: diff --git a/src/safe_apps/admin.py b/src/safe_apps/admin.py
  --- a/src/safe_apps/admin.py
  +++ b/src/safe_apps/admin.py
  @@ -2,5 +2,34 @@
   
   from .models import SafeApp, Provider
   
  -models = [SafeApp, Provider]
  -admin.site.register(models)
  +
  +class NetworksFilter(admin.SimpleListFilter):
  +    title = 'Networks'
  +    parameter_name = 'networks'
  +
  +    def lookups(self, request, model_admin):
  +        values = SafeApp.objects.values_list('networks', flat=True)
  +        # lookups requires a tuple to be returned – (value, verbose value)
  +        networks = [(network, network) for networks in values for network in networks]
  +        networks = sorted(set(networks))
  +        return networks
  +
  +    def queryset(self, request, queryset):
  +        if value := self.value():
  +            queryset = queryset.filter(networks__contains=[value])
  +        return queryset
  +
  +
  +@admin.register(SafeApp)
  +class SafeAppAdmin(admin.ModelAdmin):
  +    list_display = ('name', 'url', 'networks')
  +    list_filter = (NetworksFilter,)
  +    search_fields = ('name', 'url')
  +    ordering = ('name',)
  +
  +
  +@admin.register(Provider)
  +class ProviderAdmin(admin.ModelAdmin):
  +    list_display = ('name', 'url')
  +    search_fields = ('name',)
  +    ordering = ('name',)
  
verification_info: {"golden_diff": "diff --git a/src/safe_apps/admin.py b/src/safe_apps/admin.py\n--- a/src/safe_apps/admin.py\n+++ b/src/safe_apps/admin.py\n@@ -2,5 +2,34 @@\n \n from .models import SafeApp, Provider\n \n-models = [SafeApp, Provider]\n-admin.site.register(models)\n+\n+class NetworksFilter(admin.SimpleListFilter):\n+    title = 'Networks'\n+    parameter_name = 'networks'\n+\n+    def lookups(self, request, model_admin):\n+        values = SafeApp.objects.values_list('networks', flat=True)\n+        # lookups requires a tuple to be returned \u2013 (value, verbose value)\n+        networks = [(network, network) for networks in values for network in networks]\n+        networks = sorted(set(networks))\n+        return networks\n+\n+    def queryset(self, request, queryset):\n+        if value := self.value():\n+            queryset = queryset.filter(networks__contains=[value])\n+        return queryset\n+\n+\n+@admin.register(SafeApp)\n+class SafeAppAdmin(admin.ModelAdmin):\n+    list_display = ('name', 'url', 'networks')\n+    list_filter = (NetworksFilter,)\n+    search_fields = ('name', 'url')\n+    ordering = ('name',)\n+\n+\n+@admin.register(Provider)\n+class ProviderAdmin(admin.ModelAdmin):\n+    list_display = ('name', 'url')\n+    search_fields = ('name',)\n+    ordering = ('name',)\n", "issue": "Improve admin page\n- [x] Add custom Admin models with `list_display`, `display_filter` (for example, by network), `ordering` and `search_fields`: https://docs.djangoproject.com/en/3.2/ref/contrib/admin/\r\n- [x] Use admin decorator https://docs.djangoproject.com/en/3.2/ref/contrib/admin/#the-register-decorator\n", "before_files": [{"content": "from django.contrib import admin\n\nfrom .models import SafeApp, Provider\n\nmodels = [SafeApp, Provider]\nadmin.site.register(models)\n", "path": "src/safe_apps/admin.py"}], "after_files": [{"content": "from django.contrib import admin\n\nfrom .models import SafeApp, Provider\n\n\nclass NetworksFilter(admin.SimpleListFilter):\n    title = 'Networks'\n    parameter_name = 'networks'\n\n    def lookups(self, request, model_admin):\n        values = SafeApp.objects.values_list('networks', flat=True)\n        # lookups requires a tuple to be returned \u2013 (value, verbose value)\n        networks = [(network, network) for networks in values for network in networks]\n        networks = sorted(set(networks))\n        return networks\n\n    def queryset(self, request, queryset):\n        if value := self.value():\n            queryset = queryset.filter(networks__contains=[value])\n        return queryset\n\n\n@admin.register(SafeApp)\nclass SafeAppAdmin(admin.ModelAdmin):\n    list_display = ('name', 'url', 'networks')\n    list_filter = (NetworksFilter,)\n    search_fields = ('name', 'url')\n    ordering = ('name',)\n\n\n@admin.register(Provider)\nclass ProviderAdmin(admin.ModelAdmin):\n    list_display = ('name', 'url')\n    search_fields = ('name',)\n    ordering = ('name',)\n", "path": "src/safe_apps/admin.py"}]}