簡體   English   中英

如何在Django ModelForm中獲取實例

[英]How get Instance in Django ModelForm

我正在嘗試使用基於類的通用視圖UpdateView在Django中更新模型,但是我遇到了一些實例問題。當我單擊Submit button id傳遞給update form時,實例卻沒有

我是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)

表格

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

對於基於通用類的視圖,通常不需要覆蓋post 如果將實例簡化為以下內容,則基於類的視圖將負責獲取實例:

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

您無需將instance添加到模板上下文。 更新視圖會自動添加它,因此您可以在模板中使用{{ object }}{{ hardwares }}hardwares有點令人困惑,因為它是單個對象,因此最好遵循Django的建議和名稱您的模型Hardware

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM