2016-08-04 3 views
0

을 무시 절약 인라인 나는 (1.8) 장고 비교적 새로운 해요 모든 점장고 관리자 - save_formset

https://docs.djangoproject.com/en/dev/ref/contrib/admin/#django.contrib.admin.ModelAdmin.save_formset

에 추가 더라면이 링크 당으로 save_formset 기능을 대체하기 위해이 문제를 해결 읽고 오래된 스레드 (Django admin - how to save inlines?)하지만 더 나은 가시성을 얻기 위해 별도의 스레드로 키우기를 원했고이 외에도 이미 응답되었습니다.

아래 기능은 양식을 저장하기 전에 양식을 수정하려는 경우 (즉, 작성/수정 된 감사 필드를 USER로 업데이트하고 'enum_value_en'속성을 소문자로 사용하는 경우) 작동합니다. 사용자가 단지 한 항목을 입력하지만 더 추가 할 때 데이터베이스에 같은 값을 가진 모든 항목 (예 : 'enum_value_en'을 업데이트 할 때 모든 작동합니다.

def save_formset(self, request, form, formset, change): 
    instances = formset.save(commit=False) # gets instance from memory and add to it before saving it 
    for obj in formset.deleted_objects: 
     obj.delete() 
    for instance in instances: 
     for form in formset: # cleaned_data is only available on the form, so you have to iterate over formset 
      instance.modified_by = request.user 
      instance.created_by = request.user 
      instance.lowercase_enum_value_en = form.cleaned_data['enum_value_en'].lower() 
      instance.save() 
    formset.save_m2m() 
  • 예.

    항목 '이있는 경우 '&'B ', 소문자 속성이 설정되어'모두 기록에 B '.

PS. 또한 감사 드리겠습니다 O를 사람이 수 있다면 각 코드 행을 이해할 수 있도록 제안 사항에 대해 의견을 말하십시오.

감사합니다.

답변

0

문제는 인스턴스를 반복하면서 그 안에있는 formsets를 반복한다는 것입니다. 5 개의 양식이 있다고 가정하면 인스턴스마다 5 번, 각 인스턴스를 5 번 저장한다는 의미입니다. 모든 인스턴스는 최종 formset에서 동일한 값으로 끝납니다.

이 경우 양식의 cleaned_data에 액세스해야한다고 생각하지 않습니다. 인스턴스의 enum_value_en 속성에 액세스하면됩니다. 즉, 문제의 원인이되는 내부 루프가 필요하지 않습니다.

for instance in instances: 
    instance.lowercase_enum_value_en = instance.enum_value_en.lower() 
    instance.modified_by = request.user 
    instance.created_by = request.user 
    instance.save() 
+0

해결책과 설명에 대해 Alasdair에게 감사드립니다. 나는 이것을 극복하기 위해 과도한 시간을 보냈다. 우리 개발 환경에서 우리는 관리자를 사용하여 서비스를 다시 시작하고 Werkzeug와 같은 대화 형 디버거를 사용하려고 시도했지만 할 수는 없습니다. ** 아무 것도 제안 할 수 있습니까 **. 다시 한번 감사합니다. –

+0

죄송합니다, 대화 형 디버거에 대한 제안이 없습니다. – Alasdair

+0

감사합니다. –