【问题标题】:How to add objects to a different model when using a form in Django?在 Django 中使用表单时如何将对象添加到不同的模型?
【发布时间】:2020-06-09 15:08:42
【问题描述】:

我有一些通过 ForeignKey 检索对象的表单,例如Flight, Trip.

因此,例如,当有人尝试创建新的 Trip 时,他们可以从下拉列表中选择 Hotel

我的问题是:我们如何在Trip 表单上添加Hotel。就像使用 Django 自己的管理仪表板时一样,您会看到一个加号,并且您可以在创建 Trip 时添加新的 Hotel

编辑:

HotelTrip 模型上的 ForeignKey。 我正在使用ModelForm

目标是您既可以选择现有的Hotel,也可以在创建Trip 的同时创建一个新的@。

【问题讨论】:

  • HotelTrip 模型上的 FK 吗?您使用的是模型表格还是常规表格?
  • @DeA 是的,HotelTrip 上的 FK。我正在使用模型表单。
  • 通读一遍,然后看看你是否能找到适合你的解决方案; micropyramid.com/blog/how-to-use-nested-formsets-in-django

标签: python django django-models django-forms django-3.0


【解决方案1】:

我想你正在寻找forms.ModelChoiceField
它是这样使用的:

hotel = forms.ModelChoiceField(
    queryset=Hotel.objects.all() # or whatever queryset you want to use
    # Rest of the configuration
)

如果我没记错的话,它将创建一个 Html Select 标记,其中包含每个 Hotel 对象的 pk 作为值的选项。要指定每个选项的内部文本,您必须为Hotel 类定义以下方法:

def __str__(self):
    return self.name # or whatever needed


如果您确实在寻找这个,如果您正在构建生产级网站/应用程序,我不得不劝阻您不要使用它。一种更好(显然更精细)的方法是获取 Hotels 的查询集,将它们序列化为 JSON,为每个酒店创建一个卡片/行/小部件供用户搜索和选择。但是,它是管理小型项目的一种快捷方便的方式。

【讨论】:

  • 我认为问题实际上是,如何从创建Trip 对象的页面创建Hotel 对象。因此,您将 Trip ModelForm 渲染到页面并能够从同一页面创建 Hotel
  • @markwalker 你是对的。我希望能够选择现有的Hotel 或创建一个新的。我将编辑问题以澄清。
  • @JoãodeSousa 抱歉,没有正确理解问题
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-06-02
  • 2018-09-13
  • 2010-09-26
  • 2011-01-24
  • 1970-01-01
  • 2020-04-18
  • 1970-01-01
相关资源
最近更新 更多