2009-12-28 3 views
21

이것이 맞습니까?Django : limit_choices_to (정확합니까?)

class Customer(models.Model): 
    account = models.ForeignKey(Account) 


class Order(models.Model): 
    account = models.ForeignKey(Account) 
    customer = models.ForeignKey(Customer, limit_choices_to={'account': 'self.account'}) 

주문 양식에는 주문과 동일한 계정에 속하는 고객 선택 사항 만 표시됩니다.

멋진 디자인 오류를 간과하는 경우 알려주세요.

내가 가진 걱정 중요한 것은입니다 : 고객에게 외래 키가 Account를 가리 수 없기 때문에

limit_choices_to={'account': 'self.account'} 
+0

질문을 이해하지 못했습니다. 좀 더 명확해질 수 있습니까? – Mayuresh

답변

18

'is it correct'에 대한 유일한 대답은 '실행하면 효과가 있습니까?'입니다. 그 대답은 물론 아니오입니다. 그래서 왜 당신이 여기서 묻고 있는지 모르겠습니다.

limit_choices_to를 동적으로 사용하여 현재 모델의 다른 필드 값을 기반으로 제한하는 방법은 없습니다. 이를 수행하는 가장 좋은 방법은 양식을 사용자 정의하는 것입니다. ModelForm 하위 클래스를 정의하고

class MyOrderForm(forms.ModelForm): 
    def __init__(self, *args, **kwargs): 
     super(MyOrderForm, self).__init__(*args, **kwargs) 
     if 'initial' in kwargs: 
      self.fields['customer'].queryset = Customer.objects.filter(account=initial.account) 
+39

그것이 나를 위해 작동하지 않았기 때문에 그것이 잘못된 접근법이어야한다는 것을 의미하지는 않습니다. Django 사이트에서이 기능에 대한 명확한 문서가 없기 때문에 물었습니다. 구문이 올바른지 확실하지 않았습니다. – orokusaki

+0

MyOrderForm 클래스에서 obj를 요청해야하는 경우에도 유용합니다. -> http://stackoverflow.com/a/6062628/758202 – zzart

+0

예, 이것은 문서에서 명확하지 않습니다. 문제는'limit_choices_to'가 ForeignKey 함수의 매개 변수이고 그 함수가 클래스 멤버에 할당되어야한다는 것입니다. 이 수준에서 '자기'는 아무 것도 의미하지 않습니다. 작동 시키려면'장고'에'__init__'에서 작동하는 필터 함수가 있어야하고, 내가 아는 한 그것에는 필터 함수가 없습니다. –

-1

limit_choices_to={'account': 'self.account'}은 잘못된 것입니다.

+0

고객에게 '계정'속성이 있습니다. 아직도 그렇습니까? – orokusaki

0

생성자에 주문 양식 (ModelForm에서 상속)의 choices 필드를 설정해야합니다.

관련 문제