2011-06-12 4 views
0

old_object &을 삭제 한 다음 new_object를 추가하는 것 외에 M2M 관계를 직접 업데이트하는 방법이 있습니까? M2M 관계 업데이트

내가 현재 새로운 개체를 추가해야 할 것입니다 -

if 'Add School' in request.POST.values():  
    form = EducationForm(request.POST) 
    if form.is_valid and request.POST['school']: 
     school_object = form.save() 
     profile.educations.add(school_object) 
     profile.save() 
     return redirect('edit_education') 

을 그리고 이것은 내가 할 노력하고있어 - 여기 내 모델을하는

if 'Save Changes' in request.POST.values(): 
    form = EducationForm(request.POST) 
    if form.is_valid and request.POST['school']: 
     new_school_object = form.save(commit=False)  
     old_school_object = Education.objects.get(id = request.post['id']) 
     # profile.educations.get(old_school_object).update(new_school_object) # ? 
     profile.save() 
     return redirect('edit_education') 

을 그리고 -

class Education(models.Model): 
    school = models.CharField(max_length=100) 
    class_year = models.IntegerField(max_length=4, blank=True, null=True, choices=YEAR) 
    degree = models.CharField(max_length=100, blank=True, null=True) 

class UserProfile(models.Model): 
    user = models.ForeignKey(User, unique=True) 
    ... 
    educations = models.ManyToManyField(Education) 
+0

모델을 게시 할 수도 있습니까? – Udi

+0

@Udi, 모델을 포함하도록 업데이트했습니다. – David542

답변

1

Education은 아마도 UserProfile의 개인 메시지 일 수 있습니다. 대신 M2M의 ForeignKey :

class UserProfile(models.Model): 
    user = models.ForeignKey(User, unique=True) 
    ... 

class Education(models.Model): 
    user_profile = models.ForeignKey(UserProfile) 
    school = models.CharField(max_length=100) 
    class_year = models.IntegerField(max_length=4, blank=True, null=True, choices=YEAR) 
    degree = models.CharField(max_length=100, blank=True, null=True) 

(선택적으로 사용 모델 formsets : https://docs.djangoproject.com/en/dev/topics/forms/modelforms/#model-formsets)

Education 만약 실제로 한 사용자가/수정을 업데이트하는 것이 가능하지 않아야, 사용자간에 공유 - 다른 있기 때문에 사용자도 그것을 사용하고 있습니다! 앨리스 (Alice)와 밥 (Bob)이 2011 년 USC 클래스에서 BSc를 배울 것을 고려하십시오. 앨리스가 MA를 MA로 변경하면 밥 교육도 변경됩니다!

다른 팁 : 템플릿에 <input type="submit" name="save" value="..."/><input type="submit" name="add" value="..."/>을 사용하고 if에서 "저장"또는 "추가"키를 확인하십시오.

+0

@ Udi, 응답 해 주셔서 감사합니다. 그래도 사용자가 자신의 교육에 대한 항목이 여러 개인 경우에는 어떻게됩니까? 예를 들어, 그가 학부 과정을 마치고 대학원을 졸업 한 경우. 사용자 간에는 공유되지 않지만 사용자는 여러 항목을 가질 수 있습니다. 또한, 당신은 USC에 참석 했습니까? – David542

+0

@ David542, ForeignKey는 다 대일 관계를 만듭니다. 모든 UserProfile은 0 개 이상의 Education 인스턴스를 가질 수 있습니다. https://docs.djangoproject.com/en/dev/ref/models/fields/#foreignkey를 참조하십시오. 나는 USC에 참석하지 않았지만 HUJI. – Udi

관련 문제