2012-05-22 10 views
5

Ich habe dieses Modellklassen:Howto Kopie Objekt von Modell A Modell B

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

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

und ich möchte Objekte aus Artikel Tisch bekommen und sie bewegen Tisch ArticleArchive:

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

Wie TU es?

Antwort

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

+1 für create, aber streng genommen, dies ist das Kopieren von Zeilen, die sie nicht bewegen. –

+1

Für eine bessere Leistung ist es besser, 'ArticleArchive.objects.bulk_create (...)' zu verwenden. – Uri

1

Ich konnte nicht scheinen, um die Kruste des Problems zu bekommen, aber Sie können dies in der Schleife einfach tun:

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

Für eine bessere Leistung, ist es besser zu nutzen 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) 

Und dann, wenn Sie die Artikel aus der Originaltabelle löschen möchten (optional):

Article.objects.filter(date__year=2011).delete() 
Verwandte Themen