Im 내 사이트의 다양한 위치에서 사용하기 위해 모델에서 양식을 만드는 데 ModelForm을 사용합니다. 양식에는 사용자를 기준으로 필터링해야하는 외부 키 필드가 있습니다. 내보기에 다음Django ModelAdmin ModelForm에서 쿼리 집합을 가져옵니다.
class TestForm(ModelForm):
def __init__(self,user,*args,**kwargs):
super (TestForm,self).__init__(*args,**kwargs) # populates the post
self.fields['controller'].queryset = Controller.objects.filter(user=user)
class Meta:
model = Test
exclude = ['customer']
그리고를 사용 : 나는 성공적으로 사용했던이 장고 관리자 이외의 제 형태의 잘 작동 form = TestForm(user)
하지만, 내 사이트는 모델 장고 관리자 내에서 편집 할 수 있어야 역시. 그래서를 기반으로 내 ModelAdmin이 코드를 사용 Django Docs
class TestAdmin(admin.ModelAdmin):
def get_form(self, request, obj=None, **kwargs):
if request.user.is_superuser:
kwargs['form'] = SuTestForm
else:
kwargs['form'] = TestForm(request.user)
return super(TestAdmin, self).get_form(request, obj, **kwargs)
나는이 그냥 그대로 내 다른 형태의 수행하지만 난 장고에서 다시이 오류를 얻고 작업을해야 생각
: invalid literal for int() with base 10: 'TestForm'
후 난을 googeling의 비트는 ModelAdmin 내부의 검색어 필터링을두고이 방법을 건너 온이 완벽하게 잘 작동하지만 매우 건조하지 않는 것 내 ModelForm의 여러 사본을 만들 저를 필요로 않습니다
form = super(TestAdmin, self).get_form(request, obj, **kwargs)
form.base_fields['controller_fk'].queryset = Controller.objects.filter(custid=cust)
return form
. 그래서 나는 내 ModelForm queryset을 ModelAdmin 폼으로 반환하는 방법을 아는 사람이 있습니까?
나는 무엇이 문제인지 (전체 스택 추적을 제공하지 않았기 때문에 어디에서 쿼리가 잘못되는지 알 수 없음) 그러나 get_form 메소드에서 직접 폼 인스턴스를 반환하고 어떤 일이 발생하는지 확인할 수 있습니까? ? – Serafeim