仅使用最后一次迭代的Django Crispy Formsets - 覆盖最后的结果?

时间:2013-06-11 23:21:03

标签: django formsets

class BusinessMemberInlineForm(ModelForm):
    helper = FormHelper()
    username = 'no user found yet'

    def __init__(self, *args, **kwargs):
        super(BusinessMemberInlineForm, self).__init__(*args, **kwargs)

        if hasattr(self.instance, 'user'):
            self.username = self.instance.user.username

        self.helper.layout = Layout(
            Div(
                Div(
                    Column(
                        HTML('<b>%s</b>' % self.username)
                    ),
                    Column(
                        'can_post'
                    ),
                    Column(
                        'is_admin'
                    ),
                    Column(
                        'DELETE'
                    ),

                    'id',
                    'businessprofile',

                    css_class="span12"
                ),
                css_class="row-fluid"
            ),
        )

    class Meta:
        model = BusinessMember
        fields = ['can_post', 'is_admin']

输出如下内容:

no user found yet [x] can post? [x] is admin? [ ] remove?

no user found yet [ ] can post? [ ] is admin? [ ] remove?

而不是:

Admin [x] can post? [x] is admin? [ ] remove?

Test user [ ] can post? [ ] is admin? [ ] remove?

这里有一些我不理解的东西。它似乎只保存了创建的Cripsy布局的最后一个实例(一个空模型),因此它只打印“尚未找到用户”。

我完全糊涂了,我添加了print self.username并且值都设置正确。

我应该如何为动态标签添加动态标签?

1 个答案:

答案 0 :(得分:0)

唉!

我最终必须制作一个自定义小部件才能恰当地显示每个字段中的名称,这比应该的情况要难得多!

来自django导入表格

my utils / widgets.py

class DisplayTextWidget(forms.Widget):
    display_value = ""

    def __init__(self, attrs=None, display_value="Nothing here!"):
        self.display_value = display_value

        super(DisplayTextWidget, self).__init__(attrs)

    def render(self, name, value, attrs=None):
        return self.display_value

然后在forms.py

self.fields['user'].widget = DisplayTextWidget(display_value=self.instance.user.username)
相关问题