【问题标题】:An efficient way to save parsed XML content to Django Model将解析的 XML 内容保存到 Django 模型的有效方法
【发布时间】:2016-12-14 03:55:59
【问题描述】:

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

我正在开发一个将 XML 解析为 django 模型的 django 项目。特别是 Podcast 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. 本地保存的提要

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

我很乐意帮助我找到一种方法来使这种情况发生一次,并且还需要一种 DRY 机制来添加不同的提要,以便将它们解析并保存到数据库中,最好使用通过表单提交的提要 url。

【问题讨论】:

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


    【解决方案1】:

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

    响应用户在网站上的操作而发生的事情会出现在视图中。或者,如果您希望从管理站点完成此操作,则应位于 admin.py 文件中。

    【讨论】:

    • 把解析代码移到admin.py,还是一样。重复记录。
    • 您不能将它转储到任何地方的文件中。您需要将它放在一个函数中,该函数将从您的管理员中的操作中调用。
    • 我明白你在说什么,但不知道该怎么做,因为创建函数意味着调用它,除了我第一次真正需要它之外,它还会填充数据库。
    • 我不知道那是什么意思,但你知道吗,忘记管理员。将其放在视图中并从 URL 调用它。
    猜你喜欢
    • 1970-01-01
    • 2023-03-11
    • 2010-10-11
    • 1970-01-01
    • 2012-05-21
    • 2019-03-04
    • 2020-06-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多