【问题标题】:Pass model from url to create_object generic input view将模型从 url 传递到 create_object 通用输入视图
【发布时间】:2011-01-22 20:27:30
【问题描述】:

我有多个要为其创建通用输入的模型。我的第一遍使用了两个单独的网址:

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 中的变量传递到参数中,以便该行会根据变量动态选择模型。

【问题讨论】:

  • 知道了。必须在单独的函数中使用 get_model 来动态提取模型名称

标签: django url variables django-generic-views


【解决方案1】:
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'
    )

【讨论】:

    【解决方案2】:

    这个我没试过,但是你可以在create_之后使用一个变量来捕获值,并让它自动发送到create_object视图:

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

    您必须以 /create_Actor/ 而不是 /creat_actor/ 的身份访问此 URL。我不确定如何使 extra_context 键起作用。 希望这会有所帮助。

    【讨论】:

    • 感谢您的回复。我尝试了一些类似的方法,但无法正常工作。我收到以下错误:“unicode”对象没有属性“name
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-03
    • 2016-08-13
    • 2017-10-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多