如何包含带有值的change_view表单

时间:2014-12-02 07:44:44

标签: python django

我有Book表,只有一个归档value包含加密的titledescriptions本书。

现在我正在执行管理功能,管理员可以查看或编辑用户提交的标题和说明。

到目前为止,我开始使用自定义admin/users/book/5/ModelForm中获取值字段 在这里,我只想使用value向用户提交extra_context,但您知道该字段中没有显示任何内容。

models.py

class Book(models.Model):
    values = models.CharField(max_length=800, null=True, blank=True)

forms.py

class BookForm(forms.ModelForm):
    extra_field = forms.CharField()
    def save(self, commit=True):
        value = self.cleaned_data.get('value', None)
    class Meta:
        Model = Book

admin.py

class BookAdmin(admin.ModelAdmin):
        def add_view(self, request, form_url='', extra_context=None):
            return super(BookAdmin, self).add_view(request)
        def change_view(self, request, object_id, form_url='',):
            bookInfo = Book.objects.get(pk=object_id)
            pprint.pprint(bookInfo.values)
            extra_context = {}
            extra_context['value'] = bookInfo.values
            pprint.pprint(extra_context)
            return super(BookAdmin, self).change_view(request, object_id, form_url, extra_context=extra_context)
    form = BookForm
    fieldsets = (
        (None, {
            'fields': ('value',),
        }),
    )
admin.site.register(Book, BookAdmin)

这里他们提到changelist_view。我也试过了,但我不知道如何在book_change_form.html

中包含extra_context

1 个答案:

答案 0 :(得分:0)

所以这个词是 Providing initial values for custom fields based on instance data

在您的forms.py中包含以下代码,然后它将起作用....

def __init__(self, *args, **kwargs):            
    instance = kwargs.get('instance')
    if instance:
        pprint.pprint(instance.values)
        self.base_fields['values'].initial = instance.values
    forms.ModelForm.__init__(self, *args, **kwargs)