Je veux créer mon propre formulaire sur l'écran supplémentaire afin que je puisse enregistrer presque le même numéro que j'ai entré. Je souhaite séparer le formulaire sur l'écran d'ajout et l'écran de modification
Dans cet exemple, plusieurs articles avec le même numéro de série mais des numéros de succursale différents peuvent être enregistrés en même temps.
Model
models.py
from django.db import models
class Job(models.Model):
serial_number = models.IntegerField("Numéro de série")
branch_number = models.IntegerField("Numéro de la succursale")
deadline = models.DateField("La date limite")
Admin
admin.py
from django.contrib import admin
from django import forms
from .models import Job
#Forme au moment de l'ajout
class JobAdminAddForm(forms.ModelForm):
#Forme originale
number_of_jobs = forms.IntegerField(lable="Nombre de travaux")
class Meta:
model = Job
fields = ('serial_number', 'deadline')
#Forme au moment du changement
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')
#Changement de forme
def get_form(self, request, obj=None, **kwargs):
if obj:#Spécifiez JobAdminChangeForm comme formulaire au moment du changement
self.form = JobAdminChangeForm
else:#Spécifiez JobAdminAddForm comme formulaire lors de l'ajout
self.form = JobAdminAddForm
return super().get_form(request, obj, **kwargs)
def save_model(self, request, obj, form, change):
#Enregistrer tel quel lors du changement
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)
Remplacez get_form pour basculer entre les formulaires une fois ajoutés et modifiés. En remplaçant save_model, le processus au moment de l'enregistrement peut être réécrit. Lors du changement, enregistrez-le simplement tel quel et lors de l'ajout, activez l'instruction for avec la valeur du formulaire d'origine pour ajouter la valeur au numéro de branche et l'enregistrer. En remplaçant None par obj.pk, chacun peut être enregistré en tant que données distinctes.
Il semble que diverses choses peuvent être faites en concevant save_model. Veuillez indiquer s'il y a quelque chose.
Recommended Posts