2012-05-22 6 views
5

Tengo este modelo de clases:Howto copia de un objeto desde el modelo A para modelar B

class Article(models.Model): 
    [many fields] 

class ArticleArchive(models.Model): 
    [same fields as Artilce model] 

y quiero conseguir objetos de artículo mesa y moverlo a ArticleArchive tabla:

articles = Article.objects.filter(date__year=2011) 
for art in articles: 
    [and there moving objects] 

Cómo ¿hazlo?

Respuesta

9
articles = Article.objects.filter(date__year=2011).values() 
for art in articles: 
    ArticleArchive.objects.create(**art) 
+2

+1 para crear, pero estrictamente hablando, esto es duplicar filas sin moverlas. –

+1

Para un mejor rendimiento, es mejor usar 'ArticleArchive.objects.bulk_create (...)'. – Uri

1

parecía que no podía conseguir la corteza de su problema, pero se puede hacer sencillo esto en el bucle:

obj, created = ArticleArchive.objects.get_or_create(your fields) 
3

Para un mejor rendimiento, es mejor utilizar ArticleArchive.objects.bulk_create(...):

articles = list() 
for article in Article.objects.filter(date__year=2011).values(): 
    articles.append(ArticleArchive(**article)) 
if (len(articles) > 0): 
    ArticleArchive.objects.bulk_create(articles) 

Y luego, si desea eliminar los artículos de la tabla original (opcional):

Article.objects.filter(date__year=2011).delete() 
Cuestiones relacionadas