J'ai 3 modèles avec différents champs dans chacun. Pour deux des modèles, j'utilise un formulaire générique (via create_object de Django) pour demander des données. J'ai écrit une fonction qui accepte le nom du modèle et envoie à l'utilisateur de la forme génériqueDjango: Afficher un modèle générique ou un formulaire prédéfini
url(r'^add_(?P<modelname>\w+)/$', generic_add),
def generic_add(request, modelname):
mdlnm_model = models.get_model('catalog',modelname)
return create_object(request,
model = mdlnm_model,
template_name = 'create.html',
post_save_redirect = '/library/',
extra_context = {'func': 'Create ' + modelname},
login_required = 'True'
)
Pour le 3ème modèle, j'ai une classe ModelForm définie afin que je puisse omettre un des champs dans ce modèle lorsque l'utilisateur voit la forme.
url(r'^create_actor/$', create_object, Actor_Input, name='db_actor_create'),
Actor_Input = {
'form_class': ActorForm,
'template_name': 'create.html',
'post_save_redirect': '/library/',
'extra_context': {'func': 'Create Actor'},
'login_required': 'True'
}
class ActorForm(forms.ModelForm):
class Meta:
model = Actor
fields = ('name','age','height','short_description',
'long_description')
est-il un moyen de Django pour afficher le ModelForm défini si elle existe, mais sinon afficher la forme complètement générique si une forme définie n'a pas été fait? Je prévois de créer beaucoup plus de modèles, et je préfère ne pas créer une URL pour chaque modèle qui doit être séparé de la façon dont Actor est.
Donc, de manière différente, je veux modifier la fonction generic_add afin qu'elle utilise ActorForm (si elle existe) mais sinon le ModelForm générique. Je sais comment vérifier l'existence de la classe ActorForm, mais si je veux que ça soit aussi dynamique? Quelque chose comme vérifier if: modelname + 'Form' existe. Je ne sais pas comment envoyer dynamiquement l'utilisateur à un formulaire prédéfini s'il en existe un.
Des suggestions? Y a-t-il une meilleure façon de voir ce problème?
J'ai du mal à suivre ce que vous essayez d'accomplir dans l'ensemble de votre description. Êtes-vous à l'aise de coller les morceaux pertinents dans une poubelle quelque part afin que nous puissions voir ce que vous avez jusqu'ici? –
Excuses, s'il vous plaît voir la question révisée –