2010-03-25 7 views
1

ModelForm을 사용하여 양식을 만들고, ManyToMany 필드를 제외한 양식의 모든 필드에 초기 값을 설정했습니다.어떻게 장고에서 ManyToMany 필드의 초기 값을 설정합니까?

나는 그 목록을 줄 필요가 있음을 알고 있지만 제대로 작동하지는 않는다. 지금 내보기의 코드는 다음과 같습니다.

 userProfile = request.user.get_profile() 
     employer = userProfile.employer 
     bar_memberships = userProfile.barmembership.all() 
     profileForm = ProfileForm(
      initial = {'employer': employer, 'barmembership' : bar_memberships}) 

하지만 작동하지 않습니다. 내가 여기서 뭔가를 놓치고 있니?

# a class where bar memberships are held and handled. 
class BarMembership(models.Model): 
    barMembershipUUID = models.AutoField("a unique ID for each bar membership", 
     primary_key=True) 
    barMembership = USStateField("the two letter state abbreviation of a bar membership") 

    def __unicode__(self): 
     return self.get_barMembership_display() 

    class Meta: 
     verbose_name = "bar membership" 
     db_table = "BarMembership" 
     ordering = ["barMembership"] 

을 그리고 확장되고있는 사용자 프로파일 : 주석의 요청에 따라

, 여기 내 모델의 관련 부분의

# a class to extend the User class with the fields we need. 
class UserProfile(models.Model): 
    userProfileUUID = models.AutoField("a unique ID for each user profile", 
     primary_key=True) 
    user = models.ForeignKey(User, 
     verbose_name="the user this model extends", 
     unique=True) 
    employer = models.CharField("the user's employer", 
     max_length=100, 
     blank=True) 
    barmembership = models.ManyToManyField(BarMembership, 
     verbose_name="the bar memberships held by the user", 
     blank=True, 
     null=True) 

희망이 도움이됩니다.

+0

귀하의 모델을 표시하십시오. –

답변

2

오케이, 마침내 알아 냈습니다. 좋은 주인, 때때로 해결책은 너무 쉬운 방법입니다.

나는 일을 할 필요

profileForm = ProfileForm(instance = userProfile) 

내가 그 변화를 만들어, 지금은 모든 것이 작동합니다.

2

mlissner의 답변이 어떤 경우에는 효과가있을 지 모르지만 나는 그것이 당신이 원하는 것이라고 생각하지 않습니다. 키워드 "인스턴스"는 기존 레코드를 업데이트하기위한 것입니다.

단지에 줄을 변경, "초기"키워드를 사용하도록 시도 참조 : 나는 당신의 코드로이 테스트를하지 않은,하지만 난 내 코드에서 유사한 것을 사용하고 작동

bar_memberships = userProfile.barmembership.all().values_list('pk', flat=True) 

.

관련 문제