2010-03-02 18 views
0

J'ai plusieurs modèles pour lesquels je souhaite créer des entrées génériques. Mon premier passage utilisait deux URL distinctes:Passer le modèle de l'entrée générique à l'entrée create_object

url(r'^create_actor/$, create_object, {'model': Actor, 'template_name': 'create.html', 'post_save_redirect': '/library/', 'extra_context': {'func': 'Create Actor'}, 'login_required': 'True'}), 

url(r'^create_movie/$, create_object, {'model': Movie, 'template_name': 'create.html', 'post_save_redirect': '/library/', 'extra_context': {'func': 'Create Movie'}, 'login_required': 'True'}), 

Je suppose qu'il serait préférable de combiner ces éléments en une seule instruction. Je ne suis pas sûr comment passer une variable de l'url dans les paramètres de sorte que la ligne sélectionnerait dynamiquement le modèle basé sur la variable.

+0

l'a obtenu. a dû utiliser get_model dans une fonction séparée pour tirer dynamiquement le nom du modèle –

Répondre

0
from django.db import models 

url(r'^create_(?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/', 
     login_required = 'True' 
    ) 
0

Je ne l'ai pas essayé, mais vous pouvez utiliser une variable pour capturer la valeur après create_ et l'avoir envoyé automatiquement à la vue create_object:

url(r'url(r'^create_(?P<model>\w+)/$, create_object, {'template_name': 'create.html', 'post_save_redirect': '/library/', 'login_required': 'True'}) 

Vous aurez à accéder à cette URL comme/create_Actor/au lieu de/creat_actor /. Je ne suis pas sûr de savoir comment faire fonctionner la clé extra_context. J'espère que cela aide.

+0

Merci pour la réponse. J'ai essayé quelque chose dans ce sens, mais je n'ai pas réussi à le faire fonctionner. Je reçois l'erreur suivante: L'objet 'unicode' n'a pas d'attribut '__name__' –