2016-10-28 5 views
0

의 formset의 모든 새로운 형태의 ManytoMany 관계를 작성 (간체) :장고 : 나는이 세 모델을 사용하고

class Model1(models.Model): 
    field1 = models.CharField(max_length=25) 

class Model2(models.Model): 
    field1 = models.CharField(max_length=25) 

class Model3(models.Model): 
    model1 = models.ForeignKey(Model1) 
    model2 = models.ForeingKey(Model2) 

나는 MODEL1의 형태와 작동 Model2s에 대한 해당 formset하지만이 문제는 formset의 모든 Model2에 대해 Model2와 Model1을 연결하는 Model3이 필요하다는 것입니다.

Model3을 추가하여 formset의 각 Model2에 맞게 채우려면 어떻게합니까?
inlineformsets 또는 modelformsets를 사용하여 솔루션을 찾으려고했지만 실제로 이해하지 못합니다. 나는 이것이 올바른 방향인지 알지 못합니다.

나는 올바른 방향으로 나를 가리키며 무엇이든 찾고 있습니다.

if model_one_form.is_valid() and model_two_formset.is_valid(): 
    obj_one = model_one_form.save() 
    for model_two_form in model_two_formset: 
     obj_two = model_two_form.save() 
     obj_three = Model3.objects.create(model1=obj_one, model2=obj_two) 

이 간단한 간단한 ManyToManyField를 사용하여 더 잘 할 수있는 일 것으로 보인다, 또는 경우 : 위의 내 질문에 가정

+1

Model3은 Model2 만 Model1에 연결하기 때문에 사용자 데이터가 필요하지 않은 것처럼 보입니다. 그럴까요? 이 경우 양식의 저장 논리에서이를 수행 할 수 있습니다. 제출 된 Formset의 모든 Model2 인스턴스가 제출 된 Model1 인스턴스에 대한 링크가 필요한지 여부에 따라 다릅니다. – nimasmi

답변

1

그런 다음보기의 POST 처리 부분에 오른쪽 라인을 따라입니다 Model3에 액세스해야하며 동일하지만 인수는 through입니다. https://docs.djangoproject.com/en/1.10/ref/models/fields/#django.db.models.ManyToManyField.through을보십시오. 물론, 귀하의 질문은 귀하의 질문에서 지적한 것보다 더 복잡 할 수 있습니다.

+0

그게 내가 필요한 것입니다. 나는 여전히 장고를 배우고 있으며 심지어 모델을위한 함수가 있다는 것을 깨닫지도 못했다. 고맙습니다! ManyToMany Fields에 관해서는 장고의 내장 된 것들이 무대 뒤에서 무엇을하고 있었는지를 배우고 싶었 기 때문에 지금은 직접 해왔습니다. 마술 같은 느낌이 들지 않고 ManytoMany 필드를 수행하는 더 간단한 방법과 같은 느낌이 들면 아마도 inbuilt 물건을 사용할 것입니다. – BarbarianBunny

+0

그건 현명한 접근입니다. 'obj_one = Model1.objects.create (foo = bar)'를'obj_one = Model1 (foo = bar)의 단축키로 생각할 수 있습니다; obj_one.save()'. – nimasmi