2012-09-17 2 views
0

두 모델이 있고 그들과 관계를 설정하고 싶습니다.두 모델 사이의 파이썬 django 일대일 관계

class ModelA(models.Model): 
    id = models.IntegerField(primary_key=True) # DB => PK, AI, NN 
    name = models.CharField(max_length=50) 
    ... 

class ModelB(models.Model): 
    modelA = models.OneToOneField("ModelA", primary_key=True) 
    description = models.CharField(max_length=255) 
    ... 

두 모델의 관계가 있습니다. 이 관계를 데이터베이스에 저장하지 않고 ModelB에 관계를 저장하는 ModelA에 멤버를 추가 할 수 있습니까?

나는 그것을 동적으로 생성 된 관계라고 부릅니다. 두 모델이 서로를 알 수있게하는 방법에 대한 암시가 있습니까?

한 모델의 관계를 동적으로 수행 할 수 있다면 도움이 될 것이라고 생각합니다. 그렇지 않으면 모델 중 하나를 저장하면 ID 중 하나가 저장되지 않으므로 모델을 저장하는 데 문제가 발생합니다.

두 모델 모두에서 관계를 갖고 싶기 때문에 장고 관리에서 인라인으로 모델을 쉽게 사용할 수 있습니다.

관련

답변

0

장고 역 관계는 ​​기본적으로 만들어집니다.

MODELA를 얻으려면 사용합니다 :

ModelA.objects.filter(modelb__pk = 1) 

당신은 여기에서 자세한 내용을 찾을 수 있습니다 :

https://docs.djangoproject.com/en/dev/topics/db/queries/

+0

답장을 보내 주셔서 감사합니다. django-admin에서 ModelA를 ModelB의 인라인으로 표시하는 데 어떻게 도움이되는지 알 수 없습니다. 역 인라인이 없다는 것을 알고 있고, ModelA에 관계 멤버를 두는 것으로 wokr을하고 싶다. – Martin

0
장고 ORM 먼저 MODELA을 절약 할 수

, 다음 ModelB, 데이터를 유지하기 위해 DB의 무결성.

장고는 하나의 트랜잭션에서 여러 항목을 저장하려고 시도 할 수 있습니다.이 방법으로 취소하면 아무 것도 저장되지 않습니다. 그러나 쉘 또는 파이썬 코드에서 가능합니다. HTTP를 통해 지금까지 여러 쿼리를 통해 트랜잭션을 유지 관리 할 수 ​​없습니다.

모델 A를 모델 B의 인라인으로 표시해야하는 경우 새 필드/모델이 아닌 사용자 지정 관리 인터페이스가 필요합니다. 사용자 정의 관리자 위젯을 작성하는 방법을 알 수 없습니다. 나는 사용자 정의 편집기보기와 비슷한 일을했다 & 템플릿 & 자바 스크립트. 저장되지 않은 모델을 request.session에 저장했습니다.