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.
Der Parsing-Code wurde in admin.py verschoben und es ist immer noch dasselbe. Doppelte Datensätze – cpkthompson
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. –
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