Je suppose que c'est plus une question python qu'une django, mais je ne pouvais pas répliquer ce comportement ailleurs, donc je vais utiliser le code exact qui ne fonctionne pas comme attendu.Différence entre renvoyer la classe modifiée et utiliser type()
je travaillais sur certaines formes dynamiques django, quand je trouve cet extrait de fonction de l'usine:
def get_employee_form(employee):
"""Return the form for a specific Board."""
employee_fields = EmployeeFieldModel.objects.filter(employee = employee).order_by ('order')
class EmployeeForm(forms.Form):
def __init__(self, *args, **kwargs):
forms.Form.__init__(self, *args, **kwargs)
self.employee = employee
def save(self):
"Do the save"
for field in employee_fields:
setattr(EmployeeForm, field.name, copy(type_mapping[field.type]))
return type('EmployeeForm', (forms.Form,), dict(EmployeeForm.__dict__))
[de: http://uswaretech.com/blog/2008/10/dynamic-forms-with-django/]
Et il y a une chose que je ne comprends pas, pourquoi retourner EmployeeForm modifié ne fait pas l'affaire? je veux dire quelque chose comme ceci:
def get_employee_form(employee):
#[...]same function body as before
for field in employee_fields:
setattr(EmployeeForm, field.name, copy(type_mapping[field.type]))
return EmployeeForm
Quand j'ai essayé de retourner django de classe modifiée ignoré mes champs supplémentaires, mais le retour résultat de le type() fonctionne parfaitement.
Je pense que la raison de dict (EmployeeForm .__ dict__) était que les formes antérieures.Formule utilisée pour retourner un DictProxy pas un dict. – agiliq