2017-04-04 3 views
-1

부서에 현재 작업중인 프로젝트를 등록하는 양식이 있습니다.Django forms : 초기 값 설정

models.py

class Department(models.Model): 
    dept_name = models.CharField(max_length=25) 
    address = models.CharField(max_length=50) 

class Project(models.Model): 
    projectname = models.CharField(max_length=25) 
    department = models.ForeignKey(Department, null=True, blank=True, on_delete=models.SET_NULL) 

forms.py

class ProjectChoiceField(ModelChoiceField): # return a list of projects for the department form. 
    def label_from_instance(self, obj): 
     return "%s" % obj.projectname 

class SetDepartmentProjectForm(ModelForm): 
    def __init__(self, *args, **kwargs): 
     super(SetDepartmentProjectForm, self).__init__(*args, **kwargs) 
     if not self.fields['projectstring']: # no default set 
      self.fields['projectstring'] = ProjectChoiceField(Project.objects.filter(department=self.instance), required=False) 
     else: 
      project = Project.objects.get(projectname=self.fields['projectstring']) 
      self.fields['projectstring'] = ProjectChoiceField(Project.objects.filter(department=self.instance), required=False, initial=project.pk) 

    class Meta: 
     model = Department 
     fields = ['dept_name', 'address', 'projectstring'] 

이 값 세트가없는 경우 프로젝트의 드롭 세트를 만들기 위해 확인을 작동하지만, 일부 프로젝트 이름 값으로 설정되어있는 경우 - 초기 arg (Project.pk)는 올바른 프로젝트를 폼의 초기 값으로 선택하지 않습니다.

답변

-1

initial=self.instance.related_fieldname.pk으로 설정할 수 있습니다.

+0

initial = self.instance.related_fieldname은 문자열이며 pk가 없습니다. 관련된 OtherModel의 pk를 조회하려고합니까? 즉. 위젯이 ChoiceField의 값으로 사용하는 것입니다. – Xeberdee

+0

'OtherModel'의 인스턴스 여야합니다. 그렇습니까? – slurms

+0

OtherModel 선택은 실제로 다른 모델의 pk입니다. 그러나 올바른 pk를 선택하고 intial = other_model.pk를 선택하더라도 여전히 기본적으로 아무것도 선택되지 않습니다. --------- 내 편집을 참조하십시오. – Xeberdee