Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在Django ModelForm中获取实例_Python_Django_Django Models_Django Forms - Fatal编程技术网

Python 如何在Django ModelForm中获取实例

Python 如何在Django ModelForm中获取实例,python,django,django-models,django-forms,Python,Django,Django Models,Django Forms,我正在尝试使用基于类的通用视图UpdateView更新Django中的模型。但我有一些实例问题。当我单击“提交”按钮时,id为“传递到更新表单”,但实例不是 我是django的新手,所以如果我做了傻事,请原谅 url.py app_name = 'inventory' urlpatterns = [ url(r'^$', views.IndexView.as_view(), name='index'), url(r'^inventory/(?P<pk>[0-9]+)/delete/

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

我是django的新手,所以如果我做了傻事,请原谅

url.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'),]
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)
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', }
class HardwareUpdate(UpdateView):
    model = Hardwares
    template_name = 'inventory/update_form.html'
    form_class = HardwareForm
forms.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'),]
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)
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', }
class HardwareUpdate(UpdateView):
    model = Hardwares
    template_name = 'inventory/update_form.html'
    form_class = HardwareForm
视图.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'),]
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)
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', }
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 %}
{%extends'inventory/basic_menu.html%}
{%block body%}
{%csrf_令牌%}
硬件
单位
{{form.hardware_unit}
硬件单元名称,例如:防火墙、笔记本、电话
//有更多的8个这样的表单组
{%endblock body%}
这是我的update_form.html的一部分,其余部分是相同的

解决方案 我的更新按钮表单的方法出现了问题。它的方法是“post”。我将其更改为“get”方法并解决了问题。不需要过度使用Updateview post函数。感谢所有人提供解决方案

之前

        <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 %}...........

{%csrf_令牌%}。。。。。。。。。。。
之后

        <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 %}...........

{%csrf_令牌%}。。。。。。。。。。。

对于基于类的通用视图,通常不需要重写
post
。如果将实例简化为:

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

您不需要将
实例
添加到模板上下文中。更新视图将自动添加它,因此您可以在模板中使用
{{object}
{{hardwares}
hardwares
有点混乱,因为它是一个单一的对象--最好按照Django的建议命名您的模型
hardwares

对于基于类的通用视图,通常不需要重写
post
。如果将实例简化为:

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


您不需要将
实例
添加到模板上下文中。更新视图将自动添加它,因此您可以在模板中使用
{{object}
{{hardwares}
hardwares
有点混乱,因为它是一个单一的对象--最好按照Django的建议命名您的模型
hardwares

my updateView清楚地查看了工作情况,我可以在其他项目中获得实例。但是当我创建表单并添加一些表单属性时,我遇到了这个问题。我认为这是源于表单。p请尝试缩小问题的范围。如果您将模板简化为使用
{{form}
,是否有效?如果您删除
form_class=HomeForm
并使用自动生成的表单,是否有效?@khayyam_islamzadeh您最终是如何解决问题的?当我删除form_class时。当我在HardwareUpdate类中定义字段后,它会出现“fields”错误。这次会显示表单字段,但不会显示实例。当我定义字段{{object.hardware_unit}时,它显示了它们的实例,但这次字段不起作用。我的更新视图工作得很清楚,我可以在其他项目中获得实例。但是当我创建表单并添加一些表单属性时,我遇到了这个问题。我认为这是源于forms.py尝试缩小问题的范围。如果您将模板简化为使用
{{form}
,是否有效?如果您删除
form_class=HomeForm
并使用自动生成的表单,是否有效?@khayyam_islamzadeh您最终是如何解决问题的?当我删除form_class时。它获取“字段”错误,在我在HardwareUpdate类中定义字段之后..这次显示表单字段,但不显示实例。当我定义字段{object.hardware_unit}时,它显示它们的实例,但这次字段不显示您的模板。我更新了问题并添加了我模板的一些部分。是否覆盖了get方法?否,我没有。我认为不需要重写get方法。我搜索了关于updateview的相同示例,但我没有在示例中看到重写get方法。另外,最好使用列表
[…]
而不是集合
{…}
对于表单中的
字段
。请显示您的模板。我更新了问题并添加了我模板的一些部分。您是否覆盖了get方法?不,我没有。我认为不需要覆盖get方法。我搜索了关于updateview的相同示例,但在示例中没有看到覆盖get方法。除此之外,最好使用列表
[…]
而不是表单中
字段的集
{…}