2017-10-02 3 views
0

누구든지 django-fobi에서 기본 핸들러를 설정할 수 있습니까? 접근 방식은 무엇입니까? 모든 폼의 기본값으로 db_store 핸들러를 설정하고 싶습니다.django fobi에서 기본 핸들러를 설정하는 방법

모델에 기본값을 설정하려했지만 성공하지 못했습니다.

답변

0

아무런 해결책이 없습니다. 다음과 같이

그러나, 당신은 할 수 :

해결 방법 1 :의 FormEntry 모델의 업데이트를보고 프로그래밍 방식으로 형태가 저장 될 때마다 플러그인 db_handler를 추가 장고 신호를 사용

(그것은 그것 아직 할당되지 않았습니다).

from django.core.exceptions import ObjectDoesNotExist 
from django.db.models.signals import post_save, post_delete 
from django.dispatch import receiver 


@receiver(post_save) 
def update_document(sender, **kwargs): 
    app_label = sender._meta.app_label 
    model_name = sender._meta.model_name.lower() 
    instance = kwargs['instance'] 

    if app_label == 'fobi' and model_name == 'formentry': 
     from fobi.models import FormHandlerEntry 
     FormHandlerEntry.objects.get_or_create(
      plugin_uid='db_store', 
      form_entry=instance  
     ) 

해결 방법 2 :

또한 양식 콜백을 등록 할 수 있습니다 (fobi 양식 제출 프로세스의 거의 각 단계에 대해 구현 콜백을 가지고).

콜백에서 db_store 플러그인의 기능을 모방해야합니다 (주로 복사 - 붙여 넣기).

import datetime 

import simplejson as json 

from fobi.base import (
    form_callback_registry, 
    FormCallback, 
    get_processed_form_data, 
) 
from fobi.constants import CALLBACK_FORM_VALID 
from fobi.contrib.plugins.form_handlers.db_store.models import SavedFormDataEntry 


class AutoDbStore(FormCallback): 

    stage = CALLBACK_FORM_VALID 

    def callback(self, form_entry, request, form): 
     form_element_entries = form_entry.formelemententry_set.all() 

     # Clean up the values, leave our content fields and empty values. 
     field_name_to_label_map, cleaned_data = get_processed_form_data(
      form, 
      form_element_entries 
     ) 

     for key, value in cleaned_data.items(): 
      if isinstance(value, (datetime.datetime, datetime.date)): 
       cleaned_data[key] = value.isoformat() \ 
        if hasattr(value, 'isoformat') \ 
        else value 

     saved_form_data_entry = SavedFormDataEntry(
      form_entry=form_entry, 
      user=request.user if request.user and request.user.pk else None, 
      form_data_headers=json.dumps(field_name_to_label_map), 
      saved_data=json.dumps(cleaned_data) 
     ) 
     saved_form_data_entry.save() 


form_callback_registry.register(AutoDbStore) 
관련 문제