【问题标题】:Create a django queryset for non-database data为非数据库数据创建 django 查询集
【发布时间】:2011-06-28 14:08:41
【问题描述】:

我正在寻找一种方法来创建一个简单的 ModelForm,其中包含一个基于外部数据馈送的下拉列表。我想要这个的原因是能够通过 django admin 从外部源导入数据。

这方面的一个示例可能是具有许多字段的模型class BlogPost(models.Model)。在 django admin 的“创建新对象”中,它应该只是一个字段;来自外部博客的帖子列表。当用户在下拉列表中选择帖子并保存对象时,BlogPost 的保存方法会从提要中获取所有相关数据,在 BlogPost 实例中设置适当的字段并将其保存到数据库中。

我被困在“获取外部数据并在 django admin 中呈现”部分。据我所知,最好的方法是做到这一点,并且仍然能够使用 django 的标准组件,是将外部提要包装在“非数据库、自定义查询集”中,并将其传递给 forms.ModelChoiceField?有简单的方法吗?

(我实际上并没有创建博客文章窃取程序。我有一个与我正在创建的网站完全分开的视频存档后端,我需要一种用户友好的方式来从中导入数据)

【问题讨论】:

    标签: django django-admin external feed


    【解决方案1】:

    ModelChoiceField 专门用于查询集。如果你想使用一个非查询集,为什么不使用ChoiceField,它适用于任何对象的任何列表? http://docs.djangoproject.com/en/dev/ref/forms/fields/#choicefield

    或者我在这里遗漏了什么?

    mychoices = forms.ChoiceField(choices=[('external_post', 'External Post'), ('external_post2', 'External Post 2')])
    

    您可以随意从任何来源填充列表!

    【讨论】:

    • 我想我可以使用 ChoiceField 而不是 ModelChoiceField,只要每次呈现表单时都会评估这些值。如果我说 ChoiseField(choices=foo()) 则 foo 只会被评估一次,并且我无法传递函数引用 ChoiseField(choice=foo) 进行选择。
    • 解决方案可用here :)
    • 是的,为任何动态表单内容覆盖 init
    猜你喜欢
    • 2015-10-08
    • 2021-08-04
    • 2018-03-03
    • 1970-01-01
    • 1970-01-01
    • 2011-08-04
    • 2022-01-05
    • 1970-01-01
    相关资源
    最近更新 更多