クラスベースの汎用ビューUpdateView.Butを使用してDjangoでモデルを更新しようとしています。インスタンスの問題がいくつかあります。送信ボタンをクリックするとidはフォームを更新するが、インスタンスはisn 'tDjango ModelFormでインスタンスを取得する方法
私は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の一部であります更新ボタンフォームのmethod.itsメソッドが「投稿」でした。メソッドを取得して問題を解決するように変更しました。更新されたUpdateviewの投稿機能に挑戦しました。ソリューションのすべてに感謝します。
BEFOR
<form action="{% url 'inventory:hardware-update' hardwares.id %}" method="post" style="display: inline;"> {% csrf_token %}...........
AFTER
<form action="{% url 'inventory:hardware-update' hardwares.id %}" method="get" style="display: inline;"> {% csrf_token %}...........
してくださいあなたのテンプレートを表示 – Alasdair
私は質問を更新し、私のテンプレートの一部を追加します。 –
getメソッドをオーバーライドしましたか? –