Django: FreeComments mit Datum importieren

Für den Relaunch der PlanetRCS Webseite musste ich grade ca. 700 User-Kommentare in die Django Datenbank importieren. Nach langem hin und her habe ich mich dafür entschieden die Daten über PHPMyAdmin als CSV zu exportieren und dann mit einem Django-View zu importieren, eigentlich geht das alles sehr einfach, warum ich es trotzdem kurz blogge ist folgendes: Das FreeComments Model speichert das Datum an dem ein Kommentar hinzugefügt wurde - und zwar per auto_now_add=True, welches sich nicht überschreiben lässt. Beim ersten Versuch wurden also alle Kommentare mit dem aktuellen Datum angelegt - nicht ganz dass was ich wollte.

Die Lösung, die ich gewählt habe, funktioniert so: Bevor ich anfange die Daten in das FreeComment Model zu schaufeln entferne ich das submit_date Feld aus der Klasse und füge ein gleichnamiges Feld mit auto_now_add=False hinzu, dann erstelle ich die Kommentare ganz normal über den ORM Layer in Django.

Der entscheidende Code ist also folgender:

from django.contrib.comments.models import FreeComment
field = models.DateTimeField(auto_now_add=False)
del FreeComment._meta.fields[5]
FreeComment.add_to_class('submit_date', field)

Der ganze View sieht in etwa so aus (teilweise gekürzt):

def import_comments(request):
    import csv,datetime
    reader = csv.reader(open('comments.csv'))
    ct = ContentType.objects.get(model='article')
    field = models.DateTimeField(auto_now_add=False)
    del FreeComment._meta.fields[5]
    FreeComment.add_to_class('submit_date', field)
    for cid,aid,text,date,author in reader:
        try:
            fc = FreeComment(....)
            fc.save()
        except Exception, e:
            print e
    return HttpResponse('finished')

Vielleicht gibt es noch andere Möglichkeiten das Problem mit dem Datum zu lösen, aber diese Lösung fiel mir spontan ein und lies sich relativ schnell implementieren.

Veröffentlicht von Arne Brodowski am 26. Nov. 2007, 15:36 in , , , , , .

Verwandte Einträge


Dein Kommentar

 (Wird nicht veröffentlicht)

Zeilenumbrüche und führende Leerzeichen bleiben erhalten.