2013-11-04 1 views
0

saveas 버튼을 덮어 쓰고 싶습니다. 객체 목록에 있지 않고 새 객체에 직접 redirecrt 버튼을 눌러야합니다.Django. 'request'객체가 ModelForm에없는 경우

그래서 내가 의 방법 ModelForm 퇴피의 standart 을 무시하고 거기에 요청 개체를 얻을 필요 - 확인 다른 이름으로 저장 버튼을 누를 경우 :

*admin.py 
class AirplanesAdmin(admin.ModelAdmin): 
    form = AirplaneEditForm 


forms.py 
class AirplaneEditForm(forms.ModelForm): 

def __init__(self, *args, **kwargs): 
    self.request = kwargs.pop('request', None) 
    super(AirplaneEditForm, self).__init__(*args, **kwargs) 

def clean(self): 
    print self.request 
    return self.cleaned_data 

def save(self, force_insert=False, force_update=False, commit=True,): 
    plane = super(AirplaneEditForm, self).save(commit=False) 

    print self.request 

    if commit: 
     plane.save() 

    return plane 

class Meta: 
    model = Airplanes 

그러나 모두 에서 인쇄 요청은 없음 ... 내가 잘못 했습니까?

+1

당신은 전달해야 할 또 다른 예를 참조하십시오'request' 명시 적으로 init에서는 모델 admin에 의해 수행되지 않습니다. – Rohan

+0

코드 예제를 작성할 수 있습니까? 나는 그것을하려고하지만 Django는 admin.py에서 ** 요청 ** 객체를 알지 못한다고 말했다. – user2919162

답변

2

장고 (Django) 형식은 모델과 뷰 사이에있는 항목으로, 상황에 구애받지 않습니다. 일반적으로 양식 내의 request 개체에 의존하는 작업을해서는 안됩니다. @Rohan는 의미

는 양식이 초기화 될 때 AirplanesAdmin 요청 객체를 전달하지 않는다는 것입니다, 그래서 실제로 내부 KeyError 기본 값 때 kwargs.pop('request', None) (두 번째 인수, None)가 반환됩니다. 실제로는 kwargs에서 아무 것도 나오지 않습니다. 이 동작을 재정의하려면 ModelAdmin의 렌더링 방법을 재정의해야합니다.

사용할 수있는 방법은 the doc을 읽으십시오.

+2

문서를 살펴보면 ** save_model ** 메소드가 내 모든 문제를 해결했다. 많은 감사 – user2919162

0

요청 객체가 admin.py에, 그래서 admin.py

에서 forms.py에 전달되지 않는 :

class AirplanesAdmin(admin.ModelAdmin): 
    form = AirplaneEditForm(request=request) 

here

+0

음. 'AirplaneEditForm (request = request)'는 _class 정의 _ 순간에'request'의 값을 사용합니다. – tzot

+0

나는 당신이 옳다고 생각한다. 아마도 나는 내 대답을 그냥 지울거야. – Anupam

관련 문제