2012-07-27 4 views
0

에 사용되는 프록시 모델을 선택하는 변수를 사용하는 방법내보기에서 모델</p> <pre><code>#models.py class BaseModel(model.Models) some_field = ... class Proxy_1(BaseModel) class Meta: proxy=True class Proxy_2(BaseModel) class Meta: proxy=True class Proxy_3(BaseModel) class Meta: proxy=True </code></pre> <p>이 장고

#views.py 
    #check the field and based on the value 
    #choose appropriate Proxy model 
    if request.POST['some_field'] == '1' 
     # Table_Name = Proxy_1 ??????? ---HERE --- 
    if request.POST['some_field'] == '2' 
     # Table_Name = Proxy_2 ??????? ---HERE --- 
    if request.POST['some_field'] == '3' 
     # Table_Name = Proxy_3 ??????? ---HERE --- 

    foo = Table_Name.objects.get_or_create(...) 

정말 어떻게 해야할지 모르겠다 .. 필자는 분명히 request.POST 호출 사이에 foo = Table_Name.objects.get_or_create (...)를 쓸 수 있지만, 너무 길고 나중에 디버깅하기가 어렵습니다.

내 아이디어는 모델을 확인하기 위해 models.py에 함수를 작성하는 방법에 관한 것이었지만이를 다시 수행하는 방법을 모르거나 HTML 템플릿에서 어떻게 든 검사 할 수 있습니다.

답변

1

간단한 해결책이 모델의 형태를 만들고 적절한 프록시 인스턴스를 반환하는 방법을 저장 오버라이드 (override) 감사합니다 :

# forms.py 
PROXIES = {'1': Proxy_1, '2': Proxy_2, '3': Proxy_3} 
class BaseModelForm(forms.ModelForm): 
    class Meta: 
     model = BaseModel 

    def save(self, commit=True): 
     instance = super(BaseModelForm, self).save(commit=True) 
     if instance.some_field in PROXIES.keys(): 
      if commit: 
       return PROXIES[instance.some_field].objects.get(pk=instance.pk) 
      return PROXIES[instance.some_field](**self.cleaned_data) 
     return instance 

# views.py 
def myview(request): 
    form = BaseModelForm(request.POST or None) 
    if form.is_valid(): 
     instance = form.save() 
+0

대단히 감사합니다! 두 번째 시도 =) – Vor