60 lines
2.2 KiB
Python
60 lines
2.2 KiB
Python
from django.contrib import admin
|
|
from django import forms
|
|
from .models import Neo4jProfile
|
|
|
|
class Neo4jProfileForm(forms.ModelForm):
|
|
"""
|
|
Custom form to allow secure password & API key updates in Django Admin.
|
|
"""
|
|
password = forms.CharField(
|
|
widget=forms.PasswordInput(render_value=True),
|
|
required=False,
|
|
help_text="Leave blank to keep the current password."
|
|
)
|
|
|
|
openai_api_key = forms.CharField(
|
|
widget=forms.PasswordInput(render_value=True),
|
|
required=False,
|
|
help_text="Leave blank to keep the current API key."
|
|
)
|
|
|
|
class Meta:
|
|
model = Neo4jProfile
|
|
fields = "__all__"
|
|
|
|
def clean_password(self):
|
|
"""
|
|
Ensure that the password field is only updated if changed.
|
|
"""
|
|
password = self.cleaned_data.get("password")
|
|
if not password and self.instance:
|
|
return self.instance.password # Keep the existing password if left blank
|
|
return password
|
|
|
|
def clean_openai_api_key(self):
|
|
"""
|
|
Ensure that the OpenAI API key is only updated if changed.
|
|
"""
|
|
api_key = self.cleaned_data.get("openai_api_key")
|
|
if not api_key and self.instance:
|
|
return self.instance.openai_api_key # Keep the existing API key if left blank
|
|
return api_key
|
|
|
|
@admin.register(Neo4jProfile)
|
|
class Neo4jProfileAdmin(admin.ModelAdmin):
|
|
form = Neo4jProfileForm
|
|
list_display = ("name", "uri", "model_name") # Display only non-sensitive info
|
|
search_fields = ("name", "uri", "model_name") # Enable search functionality
|
|
list_filter = ("model_name",) # Allow filtering by AI model
|
|
exclude = ("password", "openai_api_key") # Keep sensitive fields hidden in the list view
|
|
|
|
def save_model(self, request, obj, form, change):
|
|
"""
|
|
Custom save behavior to log when an admin modifies a profile.
|
|
"""
|
|
if change:
|
|
self.message_user(request, f"Updated Neo4j Profile: {obj.name}")
|
|
else:
|
|
self.message_user(request, f"Created new Neo4j Profile: {obj.name}")
|
|
super().save_model(request, obj, form, change)
|