2010-05-12 5 views
1

외래 키 데이터를 한 개체에서 다른 개체로 복사하려면 어떻게해야합니까?django 다른 모델에 외래 키 데이터 복사

#models.py 
class ModelA(models.Model) 
    field1 = models.CharField(max_length=10) 

class ModelB(models.Model) 
    field2 = models.CharField(max_length=10) 
    field3 = models.ForeignKey(ModelA) 

#views.py 
a = ModelA(field1 = 'hello') 
b = ModelB(field2 = 'goodbye', field3 = a) 
c = ModelB(field2 = 'goodbye again', field3 = a) 

d = ModelA(field1 = 'another') 

이제 나는 d와 동일한 외래 키 데이터를주고 싶습니다. 즉 b 및 c를 기록한다.

감사 존

답변

1

글쎄, 내가 원하는 것을 이해한다면. 당신은 당신의 모델을 수정해야합니다 : 당신은 당신의 모델을 유지하기 위해 선호하는 경우에 당신이 할 수

#views.py 
b = ModelB(field3 = 'goodbye') 
c = ModelB(field3 = 'goodbye again') 
a = ModelA(field1 = 'hello', field2 = [b, c]) 

d = ModelA(field1 = 'another', field2 = a.field2) 

을 또는 : 그래서

#models.py 
class ModelA(models.Model) 
    field1 = models.CharField(max_length=10) 
    field2 = models.ForeignKey(ModelA) 

class ModelB(models.Model) 
    field3 = models.CharField(max_length=10) 

을, 당신은 할 수

#models.py 
class ModelA(models.Model) 
    field1 = models.CharField(max_length=10) 

class ModelB(models.Model) 
    field2 = models.CharField(max_length=10) 
    field3 = models.ForeignKey(ModelA) 

#views.py 
a = ModelA(field1 = 'hello') 
b = ModelB(field2 = 'goodbye', field3 = a) 
c = ModelB(field2 = 'goodbye again', field3 = a) 


d = ModelA(field1 = 'another') 


#here you get all the objects related to "a" 
query = ModelB.objects.filter(field3=a) 

#iterated over them 
for obj in query: 
    obj.field3 = d 

내가 생각하는 또 다른 방법은 다음과 같습니다.

#models.py 
class ModelA(models.Model) 
    field1 = models.CharField(max_length=10) 
    field2 = models.ForeignKey(ModelA) 

class ModelB(models.Model) 
    field3 = models.CharField(max_length=10) 
    field4 = models.ForeignKey(ModelA) 

#views.py 
a = ModelA(field1 = 'hello') 
b = ModelB(field3 = 'goodbye', field4 = a) 
c = ModelB(field3 = 'goodbye again', field4 = a) 


d = ModelA(field1 = 'another', field2 = a) 

끝난 것 같아요. 그러나 나는 그것이 당신에게 유용 할 수 있기를 바랍니다. ^^

+0

이것은 대답이 아닙니다. 댓글을 삭제하고 다시 게시하십시오. –

+0

예제를 추가했습니다. 이것이 도움이되기를 바랍니다. – John

0

나는 정확히 요구하는지에 명확하지 않다. 나는 그것이 뭔가 이상이라고 가정하고 있습니다.

foo.fk_field = bar.fk_field 
+0

외장 키 데이터가 한 모델에서 다른 모델로 변경 될 것입니다. foo와 bar 모두 동일한 외래 키 데이터 (동일한 데이터의 중복 사본이며 실제로는 같은 레코드가 아님)를 복사하도록 복사하려고합니다. – John