Ich möchte mein eigenes Formular auf dem zusätzlichen Bildschirm erstellen, damit ich fast die gleiche Nummer registrieren kann, die ich eingegeben habe. Ich möchte das Formular auf dem Hinzufügen-Bildschirm und dem Änderungsbildschirm trennen
In diesem Beispiel können mehrere Artikel mit derselben Seriennummer, aber unterschiedlichen Filialnummern gleichzeitig registriert werden.
Model
models.py
from django.db import models
class Job(models.Model):
serial_number = models.IntegerField("Ordnungsnummer")
branch_number = models.IntegerField("Zweig-Nummer")
deadline = models.DateField("Die Deadline")
Admin
admin.py
from django.contrib import admin
from django import forms
from .models import Job
#Formular zum Zeitpunkt der Zugabe
class JobAdminAddForm(forms.ModelForm):
#Ursprungsform
number_of_jobs = forms.IntegerField(lable="Anzahl der Arbeiten")
class Meta:
model = Job
fields = ('serial_number', 'deadline')
#Formular zum Zeitpunkt der Änderung
class JobAdminChangeForm(forms.ModelForm):
class Meta:
model = Job
fields = ('serial_number', 'branch_number', 'deadline')
class JobAdmin(admin.ModelAdmin):
list_display = ('id', 'serial_number', 'branch_number', 'deadline')
#Formwechsel
def get_form(self, request, obj=None, **kwargs):
if obj:#Geben Sie JobAdminChangeForm als Formular zum Zeitpunkt der Änderung an
self.form = JobAdminChangeForm
else:#Geben Sie beim Hinzufügen JobAdminAddForm als Formular an
self.form = JobAdminAddForm
return super().get_form(request, obj, **kwargs)
def save_model(self, request, obj, form, change):
#Beim Ändern unverändert speichern
if change:
obj.save()
else:
for i in range(form.cleaned_data['number_of_jobs']):
obj.pk = None
obj.branch_number = i + 1
obj.save()
admin.site.register(Job, JobAdmin)
Überschreiben Sie get_form, um beim Hinzufügen und Ändern zwischen Formularen zu wechseln. Durch Überschreiben von save_model kann der Prozess zum Zeitpunkt des Speicherns neu geschrieben werden. Speichern Sie es beim Ändern einfach so, wie es ist, und drehen Sie beim Hinzufügen die for-Anweisung mit dem Wert des Originalformulars, um den Wert zur Verzweigungsnummer hinzuzufügen und zu speichern. Durch Ersetzen von obj.pk durch None kann jedes als separate Daten gespeichert werden.
Es scheint, dass verschiedene Dinge getan werden können, indem man save_model entwickelt. Bitte weisen Sie darauf hin, wenn es etwas gibt.
Recommended Posts