Django admin是一個強大的管理后臺,可以方便地管理數據。在開發中,我們可能需要向admin中傳入JSON數據。如何傳入JSON數據呢?
我們可以通過定義一個ModelAdmin類,并在其中定義一個自己的form組件來實現。這樣我們就可以自定義實現JSON數據的傳輸。
from django import forms from django.contrib import admin from django.forms import widgets class JsonInput(widgets.TextInput): def __init__(self, attrs=None): super(JsonInput, self).__init__(attrs) def render(self, name, value, attrs=None): if name: attrs['name'] = name attrs['type'] = 'text' if value: attrs['value'] = safe(value) attrs['class'] = attrs.get('class', '') # 獲取class屬性 attrs['class'] += ' jsoninput' # 給class屬性增加一個名為jsoninput的樣式 final_attrs = self.build_attrs(attrs) return super(JsonInput, self).render(name, value, final_attrs) class MyForm(forms.ModelForm): jsondata = forms.CharField(widget=JsonInput()) class Meta: model = MyModel fields = '__all__' class MyAdmin(admin.ModelAdmin): form = MyForm admin.site.register(MyModel, MyAdmin)
form.MyForm中的jsondata字段使用了我們自定義的JsonInput小部件,它重載了默認的TextInput部件,以將JSON數據放入文本輸入字段中。create方法中使用form字段定義的這個自定義表單。而MyAdmin類繼承于admin.ModelAdmin,用來管理MyModel類相關的所有管理任務。決定了admin應該顯示哪些頁面和哪些基于MyModel的類型應使用相應的屬性。
這樣我們就可以方便地傳輸JSON數據到Django admin中了。