在django管理中添加内联项目的完整更改表单的链接? [英] Adding links to full change forms for inline items in django admin?

查看:111
本文介绍了在django管理中添加内联项目的完整更改表单的链接?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个标准的管理员更改表单的对象,通常的StackedInline表单为ForeignKey关系。我希望能够将每个内联项目链接到相应的全尺寸更改表单,因为内联项目已经内联了自己的项目,我无法嵌套它们。

I have a standard admin change form for an object, with the usual StackedInline forms for a ForeignKey relationship. I would like to be able to link each inline item to its corresponding full-sized change form, as the inline item has inlined items of its own, and I can't nest them.

我已经尝试从自定义小部件到自定义模板的所有内容,并且无法使任何工作。到目前为止,我以简单的形式看到的解决方案似乎并不适用于内联。我正在准备尝试使用jQuery进行一些DOM黑客攻击,只是为了让它工作并继续前进。

I've tried everything from custom widgets to custom templates, and can't make anything work. So far, the "solutions" I've seen in the form of snippets just plain don't seem to work for inlines. I'm getting ready to try some DOM hacking with jQuery just to get it working and move on.

我希望我一定很想念一些非常简单的东西,就像这样这样一个简单的任务!

I hope I must be missing something very simple, as this seems like such a simple task!

使用Django 1.2。

Using Django 1.2.

推荐答案

有类似的问题,我想出了自定义小部件加上模型形式的一些调整。这是小部件:

I had similar problem and I came up with custom widget plus some tweaks to model form. Here is the widget:

from django.utils.safestring import  mark_safe    

class ModelLinkWidget(forms.Widget):
    def __init__(self, obj, attrs=None):
        self.object = obj
        super(ModelLinkWidget, self).__init__(attrs)

    def render(self, name, value, attrs=None):
        if self.object.pk:
            return mark_safe(
                u'<a target="_blank" href="../../../%s/%s/%s/">%s</a>' %\
                      (
                       self.object._meta.app_label,
                       self.object._meta.object_name.lower(),
                       self.object.pk, self.object
                       )
            )
        else:
            return mark_safe(u'')

现在,由于每个内联的widget都需要在构造函数中获取不同的对象,所以不能只是在标准的方式,但在Form的 init 方法:

Now since widget for each inline need to get different object in constructor you can't just set it in standard way, but in Form's init method:

class TheForm(forms.ModelForm):
    ...
    # required=False is essential cause we don't
    # render input tag so there will be no value submitted.
    link = forms.CharField(label='link', required=False)

    def __init__(self, *args, **kwargs):
        super(TheForm, self).__init__(*args, **kwargs)
        # instance is always available, it just does or doesn't have pk.
        self.fields['link'].widget = ModelLinkWidget(self.instance)

我希望有帮助。

这篇关于在django管理中添加内联项目的完整更改表单的链接?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆