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.