2016-10-20 7 views
0

Wie kann ich die Einzelteile erhalten, die NICHT in einer bestimmten Sprache übersetzt, wenn meine Modelle wie folgt strukturiert sind:Erstellen einer Liste von uncreated Fremdschlüssel

class Language(models.Model): 
    name = models.CharField(max_length=20, unique=True) 
    code = models.CharField(max_length=5, unique=True) 

class Item(models.Model): 
    id = ... 

class Translation(models.Model): 
    name = models.CharField(max_length=100) 
    language = models.ForeignKey('languages.Language') 
    item = models.ForeignKey(Item) 

Ich brauche eine effiziente Lösung wird es Millionen von Datensätzen.

Also muss ich im Grunde eine Liste durchlaufen und die fehlenden Übersetzungen hinzufügen.

Antwort

0

Ich glaube nicht, dass es einen wirklich effizienten Weg gibt. Zumindest nicht mit den von Ihnen bereitgestellten Informationen. Ich würde es so machen.

from itertools import product 

existing_translatinos = {'_'.join((t.item_id + t.language_id)) for t in Translation.objects.all()} 

for i, l in product(Item.objects.all(), Language.objects.all()): 
    if '_'.join((i.id, l.id)) not in existing_translations: 
     Translation.objects.create(...) 
+0

Der Code funktioniert nicht. –

+0

@AdamSilver Welchen Fehler gibt es? –

0

Wie kann ich die Einzelteile erhalten, die NICHT in einer bestimmten Sprache

items = Items.objects.filter(translation__language=lang_obj) 

Above Abfrage übersetzt sind, werden Ihnen alle Gegenstände, die keine Übersetzung hat in eine bestimmte Sprache lang_obj. Jetzt können Sie diese Elemente durchlaufen und die fehlenden Übersetzungen hinzufügen.

+0

Das würde für Millionen von Aufzeichnungen ewig dauern. –

+0

Warum sollten Sie das denken? Es gibt Ihnen alle Elemente, die in einer einzelnen Abfrage nicht in eine bestimmte Sprache übersetzt wurden. – AKS

Verwandte Themen