2017-05-20 4 views
0

일대일 관계가있는 장고 모델로 작업 중이며 최선을 다하고 있는지 궁금합니다. 방법. 컨텍스트를 제공하기 위해이 클래스는 기본 관계가있는 관련 클래스입니다.Django 1.10 :: 동시에 일대일 관계에서 두 인스턴스를 만듭니다.

제휴 (1) ---- (1) 계정

class Affiliate(models.Model): 
    uid = models.CharField(_('Uid'), max_length=128, blank=True, null=True) 
    [...] 

class Account(models.Model): 
    affiliate = models.OneToOneField(Affiliate, on_delete=models.CASCADE) # Here it goes. 
    [...] 

나는 동일한 개체에서 가입 및 계정 모두에 합류 고려 못했지만, 그것은 바로 보이지 않는다. 그들은 서로 다른 모델 실체입니다. 사실 한 곳을 제외하고는 항상 별도로 사용합니다. 특정 조직에 대한 제휴사를 만들 때 해당 제휴사는 함께 생성 된 계정이 있어야합니다.

그래서 ... 내가 물어보고 싶은 것은 : 두 엔티티를 동시에 생성하는 더 좋은 방법이 있는가, 다른 탄은 둘 다 생성하고 관련시키는 것입니까? 이것은 내보기에 코드합니다 (AffiliateModelForm에 대한 게시물)입니다

form = AffiliateForm(request.POST) 
    if form.is_valid(): 
     affiliate = form.save() 
     account = Account() 
     account.affiliate = affiliate 
     account.save() 

편집 : 내가 form.save() 메소드를 오버라이드 (override) 할 필요가? 그게 다야?

편집 2 : 명확한 것을 잊었습니다. AffiliateForm은 전체 Affiliate 모델의 필드를 가지며 Affiliate 편집에도 사용됩니다. 따라서 AffiliateForm의 save 메소드를 재정의하는 것은 Affiliate의 save 메소드를 재정의하는 것만 큼 좋습니다.

답변

1

난 당신이 설명한 접근 방식은 특히 당신이 계정에 양식에서 데이터를 붙이려는 건 아니죠 때문에, pre_save/post_save 신호에 Account 객체를 생성하는 것, 다른 접근하지만, 완전히 좋은 생각 Affiliate에 있습니다.

신호를 사용하는 경우 계열사가이 특정 양식 (예 : 장고 관리자 또는 다른 양식 사용) 외부에서 작성된 경우에도 처리됩니다. Django: multiple models in one template using forms을 :

https://docs.djangoproject.com/en/dev/topics/signals/

또한이 관련 질문에, 하나의 템플릿에 여러 양식을 전달하는 것과 같은 몇 가지 다른 답변이 있습니다.