将解析的XML内容保存到Django模型

时间:2016-08-08 11:30:25

标签: python xml django django-models xml-parsing

这是我的第一个问题,所以我会尽力遵守问题指南。我也在学习如何编码所以请ELI5。

我正在开发一个将XML解析为django模型的django项目。特别是播客XML。

我目前在我的模型中有这个代码:

    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是我从Radiolab Podcast Feed.

本地保存的Feed

因为每当我运行python manage.py runserver时都会运行此代码,所解析的xml内容就会像我想的那样发送到我的数据库,但每次运行server时都会发生这种情况,这意味着重复记录。

我很乐意帮助找到一种方法来实现这一点,并且还有一种DRY机制可以添加不同的Feed,这样它们就会被解析并保存到数据库中,最好是通过表单提交的feed url。

1 个答案:

答案 0 :(得分:0)

如果您不希望每次都运行它,请不要将它放在models.py中。唯一属于那里的是模型定义本身。

响应站点上的用户操作而发生的事件进入视图。或者,如果您希望从管理站点完成此操作,则应该将其放在admin.py文件中。