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