如何在 Django ModelForm 中获取实例

     2023-02-26     216

关键词:

【中文标题】如何在 Django ModelForm 中获取实例【英文标题】:How get Instance in Django ModelForm 【发布时间】:2017-08-17 12:27:14 【问题描述】:

我正在尝试使用基于类的通用视图 UpdateView 更新 Django 中的模型。但是我遇到了一些实例问题。当我单击提交按钮时,id 传递给更新表单,但实例不是

我是 django 的新手,所以如果我做了一些愚蠢的事情,请原谅。

urls.py

app_name = 'inventory'
urlpatterns = [
url(r'^$', views.IndexView.as_view(), name='index'),

url(r'^inventory/(?P<pk>[0-9]+)/delete/$', views.HardwareDelete.as_view(), name='hardware-delete'),
url(r'^inventory/update/(?P<pk>[0-9]+)/$', views.HardwareUpdate.as_view(), name='hardware-update'),
# url(r'^/inventory/add$', views.InventoryAdd.as_view(), name='add-inventory'),]

models.py

class Hardwares(models.Model):
    hardware_unit=models.CharField(max_length=100)
    hardware_model=models.CharField(max_length=100)
    hardware_subsystem=models.CharField(max_length=100)
    hardware_serial_number=models.CharField(max_length=1000)
    hardware_manufacturer = models.CharField(max_length=1000)
    hardware_operating_system = models.CharField(max_length=1000)
    hardware_quantity = models.IntegerField(default=1, validators=[MinValueValidator(1)])

    def get_absolute_url( self ):
        return reverse('inventory:index')

    def __str__(self):
        return self.hardware_serial_number+"  "+self.hardware_model+"  "+self.hardware_unit+"  "+str(self.hardware_quantity)

forms.py

class HomeForm(forms.ModelForm):
    hardware_unit = forms.CharField(
    widget=forms.TextInput(attrs='class': 'form-control', 'placeholder': 'Hardware Unit Name..', ))
    hardware_model = forms.CharField(
    widget=forms.TextInput(attrs='class': 'form-control', 'placeholder': 'Model Name...', ))
    hardware_subsystem = forms.CharField(
    widget=forms.TextInput(attrs='class': 'form-control', ))
    hardware_serial_number = forms.CharField(
    widget=forms.TextInput(attrs='class': 'form-control', ))
    hardware_manufacturer = forms.CharField(
    widget=forms.TextInput(attrs='class': 'form-control', 'placeholder': 'Manufacturer Company Name', ))
    hardware_operating_system = forms.CharField(
    widget=forms.TextInput(attrs='class': 'form-control', 'placeholder': 'Operating System Name', ))
    hardware_quantity = forms.IntegerField(validators=[MinValueValidator(1)],
    widget=forms.NumberInput(attrs='class': 'form-control', 'placeholder': 'Quantity of Harware', ))

    class Meta:
        model = Hardwares
        fields = 'hardware_unit', 'hardware_model', 'hardware_subsystem', 'hardware_serial_number',
              'hardware_manufacturer', 'hardware_operating_system', 'hardware_quantity', 

views.py

class HardwareUpdate(UpdateView):
    model = Hardwares
    template_name = 'inventory/update_form.html'
    form_class = HardwareForm

update.form html

% extends 'inventory/basic_menu.html' %
% block body %

                <form class="form-horizontal" action="" method="post"
                      enctype="multipart/form-data">
                    % csrf_token %


                    <div class="form-group">
                        <label class="col-md-3 control-label">Hardware
                            Unit</label>
                        <div class="col-md-9">
                             form.hardware_unit 

                            <span class="help-block">Hardware Unit Name eg.:  Firewall , Notebook , Phone</span>
                        </div>
                    </div>
             //Have more 8 form groups like this

% endblock body %

这是我的 update_form.html 的一部分。其余部分相同

解决方案

我的更新按钮表单的方法出现问题。它的方法是“发布”。我将其更改为“获取”方法并解决了问题。不需要覆盖 Updateview 发布功能。感谢大家的解决方案。

之前

        <form action="% url 'inventory:hardware-update' hardwares.id %"
        method="post" style="display: inline;">
                            % csrf_token %...........

之后

        <form action="% url 'inventory:hardware-update' hardwares.id %"
        method="get" style="display: inline;">
                            % csrf_token %...........

【问题讨论】:

请出示您的模板 我更新了问题并添加了我的模板的一部分。 你重写了get方法吗? 不,我没有。我认为不需要覆盖 get 方法。我搜索了有关 updateview 的相同示例,但我没有在示例中看到覆盖 get 方法 顺便说一句,最好在表单中使用[...] 列表而不是... 集合fields 【参考方案1】:

对于基于通用类的视图,您通常不需要覆盖 post。如果您将基于类的视图简化为:

class HardwareUpdate(UpdateView):
    model = Hardwares
    form_class = HomeForm
    template_name = 'inventory/update_form.html'

您无需将instance 添加到模板上下文中。更新视图会自动添加它,所以你可以在模板中使用 object hardwares hardwares 有点混乱,因为它是一个单一的对象——最好遵循 Django 的建议并命名你的模型Hardware)

【讨论】:

我的 updateView 工作清晰,我可以在其他项目中获取实例。但是当我创建表单并添加一些表单属性时,我遇到了这个问题。我认为这是源自 forms.py 尝试缩小问题所在。如果您将模板简化为使用 form ,它是否有效?去掉form_class = HomeForm,使用自动生成的表单,是否有效? @khayyam_islamzadeh 你最后是怎么解决问题的? 当我删除 form_class 时。它得到“字段”错误,并且在我在 HardwareUpdate 类中定义字段之后..这次显示了表单字段,但没有显示实例。 当我定义字段 object.hardware_unit 时,它会显示它们的实例,但这次字段不

Django如何从ModelForm获取记录ID

】Django如何从ModelForm获取记录ID【英文标题】:DjangohowtogetrecordidfromModelForm【发布时间】:2018-03-2618:09:51【问题描述】:我已经为此苦苦思索了好几个星期,但我决心让ModelForm工作!当您使用从ModelForm接收的数据处理POST时,我知... 查看详情

如何在 Django 的 ModelForm 中使用请求

】如何在Django的ModelForm中使用请求【英文标题】:HowtousetherequestinaModelForminDjango【发布时间】:2012-02-0902:54:28【问题描述】:我想创建一个查询集,将当前用户用作ModelForm中的过滤器:classBookSubmitForm(ModelForm):book=forms.ModelChoiceField... 查看详情

如何在 Modelform 的网格中呈现 Django CheckoxInput?

】如何在Modelform的网格中呈现DjangoCheckoxInput?【英文标题】:HowtorenderDjangoCheckoxInputinagridfromModelform?【发布时间】:2022-01-0317:05:13【问题描述】:models.pyclassMyModel(Model):author=ForeignKey(settings.AUTH_USER_MODEL,on_delete=CASCADE)tit 查看详情

如何使用 Ajax 在 Django 中更新 modelForm

】如何使用Ajax在Django中更新modelForm【英文标题】:HowtoupdateamodelForminDjangowithAjax【发布时间】:2015-12-2216:46:11【问题描述】:我想用Ajax更新一个模板。我的问题是:我在表单的列表中选择了一个客户,然后在第二个列表中的同一... 查看详情

使用 Django,如何在模板中动态设置 ModelForm 字段值?

】使用Django,如何在模板中动态设置ModelForm字段值?【英文标题】:UsingDjango,howdoIsetaModelFormfieldvaluedynamicallyinthetemplate?【发布时间】:2021-01-2722:31:43【问题描述】:我正在尝试利用复选框字段为用户选择的收藏夹创建模型实例。... 查看详情

如何在 Django 中向 ModelForm 添加外键字段?

】如何在Django中向ModelForm添加外键字段?【英文标题】:HowdoIaddaForeignKeyFieldtoaModelForminDjango?【发布时间】:2011-08-0804:42:03【问题描述】:我想做的是显示一个表单,让用户:输入文档标题(来自Document模型)从下拉列表中选择他... 查看详情

如何在 Django 中向 ModelForm 添加非模型字段?

】如何在Django中向ModelForm添加非模型字段?【英文标题】:HowtoaddnonmodelfieldtoModelForminDjango?【发布时间】:2013-05-1405:48:37【问题描述】:我希望这是有道理的,这就是我想做的事情(无论出于何种原因)。我想在我的模型表单中... 查看详情

如何在 Django 中获取 SelectDateWidget 以显示不同的“年份”选项

】如何在Django中获取SelectDateWidget以显示不同的“年份”选项【英文标题】:HowtogetSelectDateWidgetinDjangotoshowdifferent"Year"options【发布时间】:2011-09-0306:39:43【问题描述】:classPersonalForm(ModelForm):classMeta:model=InfoPersonalwidgets=\'dat 查看详情

如何根据在模型级别定义的枚举字段在 Django Modelform 中呈现单选按钮选择?

】如何根据在模型级别定义的枚举字段在DjangoModelform中呈现单选按钮选择?【英文标题】:HowtorenderaradiobuttonchoiceinDjangoModelformbasedonenumfielddefinedatthemodellevel?【发布时间】:2020-03-1603:45:43【问题描述】:我在模型级别定义了一个... 查看详情

如何在 django 1.9 之后使用 modelform 创建禁用字段 [重复]

】如何在django1.9之后使用modelform创建禁用字段[重复]【英文标题】:HowcanImakeadisablefieldwithmodelformafterdjango1.9[duplicate]【发布时间】:2017-08-0322:16:03【问题描述】:我想在django1.11上使用ModelForm创建禁用字段。我读到django从1.9开始就... 查看详情

如何在编辑内容并将javascript变量传递给它的新输入字段后将Django“forms.ModelForm”保存在数据库中

...并将javascript变量传递给它的新输入字段后将Django“forms.ModelForm”保存在数据库中【英文标题】:HowtosaveDjango"forms.ModelForm"indatabaseaftereditingitcontentandpassingajavascriptvariabletoit\'snewenteredfield【发布时间】:2012-03-1619:01:39 查看详情

如何在需要的基本 Django 用户模型中获取电子邮件字段?

...在注册时输入他们的电子邮件。我了解如何将表单字段与ModelForms一起使用。但是,我无法弄清楚如何强制要求现有字段。我有以下ModelForm:classRegis 查看详情

如何在 django modelform 中的必填字段后添加 *?

】如何在djangomodelform中的必填字段后添加*?【英文标题】:Howadda*afterrequiredfieldsindjangomodelform?【发布时间】:2012-10-1406:09:29【问题描述】:我有一个djangomodelform,其中一些字段是必需的。我正在使用form.as_p,我没有单独访问这... 查看详情

Django ModelAdmin 从 ModelForm 获取查询集

】DjangoModelAdmin从ModelForm获取查询集【英文标题】:DjangoModelAdmingetquerysetfromModelForm【发布时间】:2015-03-2015:12:25【问题描述】:我正在使用ModelForm从模型创建表单,以便在我网站的各个地方使用。该表单有一个外键字段,需要根... 查看详情

在 Django 中序列化 ModelForm 对象的最佳方法是啥?

】在Django中序列化ModelForm对象的最佳方法是啥?【英文标题】:WhatisthebestwaytoserializeaModelFormobjectinDjango?在Django中序列化ModelForm对象的最佳方法是什么?【发布时间】:2010-09-2700:31:21【问题描述】:我正在为我当前的项目使用Djang... 查看详情

如何在 django ModelForm CharField 之后添加“星 *”?

】如何在djangoModelFormCharField之后添加“星*”?【英文标题】:Howadda\'Star*\'afteradjangoModelFormCharField?【发布时间】:2012-08-2710:38:53【问题描述】:我的djangoModelForm中有一些必要的字段。如何在必填字段后添加红星(*)?【问题讨论】... 查看详情

django - 使用 FormView 和 ModelForm 更新模型

】django-使用FormView和ModelForm更新模型【英文标题】:django-updatemodelwithFormViewandModelForm【发布时间】:2014-03-0314:59:37【问题描述】:我不知道如何在FormView中使用ModelForm来更新已经存在的实例??此URL上的POST表单:r\'/object/(?P&lt... 查看详情

如何过滤 Django ModelForm 中的 ManyToManyField 选项?

】如何过滤DjangoModelForm中的ManyToManyField选项?【英文标题】:HowdoIfilterManyToManyFieldchoicesinaDjangoModelForm?【发布时间】:2012-04-2916:52:44【问题描述】:我想在我的ModelForm中过滤ManyToManyField选项:classMyForm(forms.ModelForm):classMeta:model=Enti... 查看详情