Добавление поля на форму административного сайта 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()
→ Ссылка