2016-08-08 76 views
0

Dies ist meine erste Frage, also werde ich mein Bestes tun, um den Fragen Richtlinien zu entsprechen. Ich lerne auch, wie man so programmiert, also bitte ELI5.Eine effiziente Möglichkeit zum Speichern von geparsten XML-Inhalten in Django Modell

Ich arbeite an einem Django-Projekt, das XML zu Django-Modellen analysiert. Speziell Podcast-XMLs.

Im Moment habe ich diesen Code in meinem Modell:

from django.db import models 
    import feedparser 
    class Channel(models.Model): 
     channel_title = models.CharField(max_length=100) 

     def __str__(self): 
      return self.channel_title 

    class Item(models.Model): 
     channel = models.ForeignKey(Channel, on_delete=models.CASCADE) 
     item_title = models.CharField(max_length=100) 

     def __str__(self): 
      return self.item_title 

    radiolab = feedparser.parse('radiolab.xml') 
    if Channel.objects.filter(channel_title = 'Radiolab').exists(): 
     pass 
    else: 
     channel_title= radiolab.feed.title 
     a = Channel.objects.create(channel_title=channel_title) 
     a.save() 


    for episode in radiolab.entries: 
     item_title = episode.title 
     channel_title = Channel.objects.get(channel_title="Radiolab") 
     b = Item.objects.create(channel=channel_title, item_title=item_title) 
     b.save() 

radiolab.xml ein Futter, das ich von Radiolab Podcast Feed.

lokal gespeichert haben Da dieser Code ausgeführt wird, wenn ich manage.py runserver Python, Der geparste XML-Inhalt wird an meine Datenbank gesendet, so wie ich es möchte, aber das passiert jedes Mal, wenn ich den Server leite, was doppelte Datensätze bedeutet.

Ich würde gerne etwas Hilfe bei der Suche nach einem Weg, um dies nur einmal geschehen und auch einen DRY-Mechanismus zum Hinzufügen verschiedener Feeds, so dass sie analysiert und gespeichert in der Datenbank vorzugsweise mit der Feed-URL über Formulare übermittelt.

Antwort

0

Wenn Sie nicht möchten, dass es jedes Mal ausgeführt wird, fügen Sie es nicht in models.py ein. Das einzige, was dazu gehört, sind die Modelldefinitionen selbst.

Inhalte, die als Reaktion auf eine Benutzeraktion auf der Website ausgeführt werden, werden in einer Ansicht angezeigt. Wenn Sie dies von der Admin-Site aus tun möchten, sollte es in die Datei admin.py gehen.

+0

Der Parsing-Code wurde in admin.py verschoben und es ist immer noch dasselbe. Doppelte Datensätze – cpkthompson

+0

Sie können es nicht einfach überall in einer Datei speichern. Sie müssen es in eine Funktion einfügen, die von einer Aktion in Ihrem Admin aufgerufen wird. –

+0

Ich verstehe, was Sie sagen, aber ich habe keine Ahnung, wie ich das machen soll, weil das Erstellen von Funktionen bedeutet, dass es aufgerufen wird, das die Datenbank neben dem ersten Mal, wenn ich es wirklich brauche, füllen wird. – cpkthompson