django копирует данные внешнего ключа в другую модель - PullRequest
1 голос
/ 12 мая 2010

как я могу скопировать данные внешнего ключа из одного объекта в другой?

, например

#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.

Спасибо John

Ответы [ 2 ]

1 голос
/ 12 мая 2010

Ну, если я понял, что вы хотите. Вам придется изменить вашу модель на:

#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)

Итак, вы можете сделать:

#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)

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 голосов
/ 12 мая 2010

Мне не совсем понятно, о чем вы спрашиваете. Я предполагаю, что это нечто большее, чем

foo.fk_field = bar.fk_field
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...