장고

2012-11-24 4 views
0

에서이 동적으로 모델 선택을 설정하는 방법 먼저 아래에있는 내 코드를 살펴 준비하시기 바랍니다장고

Project = models.ForeignKey(Project,null=False, blank=True) 
if Porject is 'A': 
    Owner = models.CharField(max_length=100, choices=**owner_set_A**) 
else: 
    Owner = models.CharField(max_length=100, choices=**owner_set_B**) 

그래서 소유자의 선택은 B로 owner_set_A 전환해야을,이 프로젝트의 값에 depense. 내가 티미의 응답이, 감사를 할 수있는,하지만 난

class Task(models.Model): 
    project = models.ForeignKey(Project,null=False, blank=True) 
    if Porject is 'A': 
     Owner = models.CharField(max_length=100, choices=**owner_set_A**) 
    else: 
     Owner = models.CharField(max_length=100, choices=**owner_set_B**) 

models.Model

에 무엇을해야 프로젝트 필드 값을 얻을 수있는 방법이 있나요 어떻게 말해 ?

답변

1

별도의 필드가 두 개 필요하지 않습니다. 필드에는 데이터가 저장되며 대신 사용자가 양식으로 표시되는 내용을 필터링해야합니다 (choices). 당신은 예를 들어, 장고 관리자를 사용하는 경우 (테스트되지 않은)

class MyModelForm(forms.ModelForm): 
    def __init__(self, *args, *kwargs): 
     super(MyModel, self).__init__(args, kwargs) 
     if self.fields['project'].foo == "bar": 
      self.fields['owner'].choices = ((0, "X"), (1, "Y"),...) 
     else: 
      self.fields['owner'].choices = ((0, "A"), (1, "B"),...) 

    class Meta: 
     model = MyModel 

admin.py

class MyModelAdmin(admin.ModelAdmin): 
    form = MyModelForm 
+0

안녕 티미과 같은 작업을 수행 할 수 있습니다, 내 의견이 – jimwan

+1

나는 당신의 업데이 트를 읽고 참조하시기 바랍니다. 요점은 모델에서이 작업을 시도해서는 안되며 올바른 위치가 아니라는 것입니다. 필드에는 두 개의 별개 * 유형 *이 없으며 필드에있는 두 개의 다른 데이터 세트 *가 있습니다. 이러한 이유로 폼 레이어 나 템플릿 레이어와 같은 다른 레이어의 필드에 저장할 수있는 값을 필터링해야합니다 –