Django管理员在没有模型的情况下内联上传文件

时间:2017-11-22 11:25:33

标签: python django

我有 // login process private void GetStudentDetail(final String mobile) { // Tag used to cancel the request String tag_string_req = "req_Verfication"; progressBarList.setVisibility(View.VISIBLE); StringRequest strReq = new StringRequest(Request.Method.POST, Config.FETCH_StudentsOfParent_URL, new Response.Listener<String>() { @Override public void onResponse(String response) { Log.d(TAG, "cerfication Response: " + response.toString()); JSONArray jsonArrayResult ; for (int i = 0; i < response.length(); i++) { try { JSONObject jObj = new JSONObject(response); boolean error = jObj.getBoolean("error"); // Check for error node in json if (!error) { jsonArrayResult = jObj.getJSONArray("user"); for(int x=0; x<jsonArrayResult.length();x++){ JSONObject json = jsonArrayResult.getJSONObject(x); String id = json.getString("id"); String studentId = json.getString("sutdentId"); int ID1 =Integer.parseInt(studentId); String full_name = json.getString("full_name"); String year = json.getString("year"); String school = json.getString("school"); String level = json.getString("level"); String driver_fullname = json.getString("driver_fullname"); String driverphone_number = json.getString("driverphone_number"); String plate_no = json.getString("plate_no"); // Decode base64_encode encoded image from mysql byte[] photo = Base64.decode(json.getString("photo"), Base64.DEFAULT) ; Bitmap bmp = BitmapFactory.decodeByteArray(photo, 0, photo.length); image.setImageBitmap(Bitmap.createScaledBitmap(bmp, image.getWidth(), image.getHeight(), false)); } } else{ String errorMsg = jObj.getString("error_msg"); Toast.makeText(getActivity(), errorMsg, Toast.LENGTH_LONG).show(); } } catch (JSONException e) { // JSON error e.printStackTrace(); Toast.makeText(getActivity(), "Json error: " + e.getMessage(), Toast.LENGTH_LONG).show(); } } } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { Log.e(TAG, "Verfication error Error: " + error.getMessage()); } }) { @Override protected Map<String, String> getParams() { Map<String, String> params = new HashMap<String, String>(); params.put("mobile", mobile); return params; } }; // Adding request to request queue MyApplication.getInstance().addToRequestQueue(strReq,tag_string_req); } 的模型,用于保存上传的文件(模型中没有FileField)。

JSONField

JSON示例

  

[   {&#34; id&#34;:&#34; file_id&#34;,    &#34; url&#34;:&#34; file_url_at_S3&#34;,   &#34;输入&#34;:&#34; MIME类型&#34;   }   ]

我想构建一个管理界面,以便用户可以填写class Task(models.Model): .... attachments = fields.JSONField(null=True) .... 个详细信息并上传将上传到S3的文件,结果json将保存在数据库中。所以我决定使用自定义Task类来处理它。

我的Form

AdminModel

@admin.register(Task) class TaskAdmin(MarkdownxModelAdmin): form = TaskForm exclude = ('created_at', 'updated_at', 'attachments') list_display = ('message', 'publish_at') def save_model(self, request, obj, form, change): upload_result = upload_files_to_s3(form.cleaned_data.get('attachments', []), task_id=obj.id) obj.attachments = upload_result super(TaskAdmin, self).save_model(request, obj, form, change) 只是{mark}的MarkdownxModelAdmin的子类。

我的自定义表单是

ModelAdmin

所有管理界面都是 enter image description here

我喜欢来自docsclass TaskForm(forms.ModelForm): attachments = MultiFileField() # redefine field from the model .... def clean(self): # validations... class Meta: model = Task fields = '__all__' 内联样式。因此,用户可以通过小预览或上传的文件路径逐个添加文件。所以界面看起来像enter image description here

这里最好的解决方案是什么?

0 个答案:

没有答案