2010-03-02 2 views
0

У меня есть несколько моделей, для которых я хочу создать общие входы. Мой первый проход использовал два отдельных URL:Пропустить модель от url до 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'}), 

Я предполагаю, что было бы намного лучше объединить их в одно утверждение. Я не уверен, как передать переменную из url в параметры, чтобы линия динамически выбирала модель на основе переменной.

+0

получил его. пришлось использовать get_model в отдельной функции, чтобы динамически моделировать имя модели. –

ответ

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

Я не пробовал это, но вы можете использовать переменную, чтобы захватить значение после create_ и она автоматически отправляется к просмотру create_object:

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

Вы должны открыть URL, как/create_Actor/вместо/creat_actor /. Я не уверен, как заставить ключ extra_context работать. Надеюсь, это поможет.

+0

Спасибо за ответ. Я пробовал что-то в этом направлении, но не мог заставить его работать. Я получаю следующую ошибку: Объект 'unicode' не имеет атрибута '__name__' –

 Смежные вопросы

  • Нет связанных вопросов^_^