Добавление поля на форму административного сайта Django
Как добавить на форму модели в административном сайте Django поле, не содержащееся в модели?
Ответы (1 шт):
Автор решения: Dmitry
→ Ссылка
Точно так же как и обычно. Form -> View -> Template
Делаете форму
from django import forms
class MyCustomForm(forms.Form):
field1 = forms.CharField(label="Field 1")
field2 = forms.IntegerField(label="Field 2")
Добавляете шаблон
{% extends "admin/base_site.html" %}
{% block content %}
<form method="post">
{% csrf_token %}
{{ form.as_p }}
<button type="submit">Submit</button>
</form>
{% if success %}
<p>Form submitted successfully!</p>
{% endif %}
{% endblock %}
Добавляете вьюшку
from django.shortcuts import render
from django.views import View
class MyCustomAdminView(View):
template_name = "admin/my_custom_template.html"
def get(self, request):
form = MyCustomForm()
return render(request, self.template_name, {"form": form})
def post(self, request):
form = MyCustomForm(request.POST)
if form.is_valid():
# Process the form data
field1_value = form.cleaned_data["field1"]
field2_value = form.cleaned_data["field2"]
# ...
return render(request, self.template_name, {"form": form, "success": True})
return render(request, self.template_name, {"form": form})
И регистрируете в админку (admin.py)
from django.contrib import admin
from django.urls import path
from .views import MyCustomAdminView
class MyCustomAdmin(admin.AdminSite):
def get_urls(self):
urls = super().get_urls()
urls += [
path("my_custom_view/", self.admin_view(MyCustomAdminView.as_view()), name="my_custom_view"),
]
return urls
admin_site = MyCustomAdmin()