Я пытаюсь извлечь все названия продуктов из модели продукта, отобразить их и их цены на экране, а затем иметь возможность изменить цену продукта любого из этих элементов. У меня есть, поэтому он перечисляет их и имеет поле для ввода цены, но я получаю эту ошибку при отправке. AttributeError в / edit-menu / edit / объект 'Product' не имеет атрибута 'is_valid'
Пожалуйста, помогите.
views.py:
def edit_menu(request):
queryset = Product.objects.all()
context = { "object_list": queryset }
if request.method == 'POST':
post=Product()
if request.POST.get('price'):
if post.is_valid():
post.price= request.POST.get('price')
post.save()
return redirect('mis446/edit-menu.html', context)
else:
return redirect(request, 'mis446/edit-menu-item.html', context)
else:
return render(request, 'mis446/edit-menu-item.html', context)
else:
return render(request, 'mis446/edit-menu-item.html', context)
Models.py :
class Product(models.Model):
name = models.CharField(max_length=100)
price = models.IntegerField()
slug = models.SlugField()
def __str__(self):
return self.name
html:
<div class = "container">
<form method = "post">
{% csrf_token %}
{% for instance in object_list %}
{{ instance.name}}: <input type="number" name="price" value = '{{ instance.price }}'/><br>
{% endfor %}
<button type ="submit">Submit Changes</button>
</form>
</div>
Вот мой urls.py для этого и моя обычная страница меню редактирования, где пользователи добавляют пункты меню
path('edit-menu/', views.add_to_menu, name='Edit Menu'),
url(r'^edit-menu/edit/$',views.edit_menu, name='Edit Menu Item'),
Теперь я получаю эту ошибку: NoReverseMatch в / edit-menu / edit / Reverse for '' не найден. '' не является допустимой функцией представления или именем шаблона.
Новые views.py:
def edit_menu(request):
queryset = Product.objects.all()
context = { "object_list": queryset }
if request.method == 'POST':
post=ProductModelForm(request.POST)
if request.POST.get('price'):
if post.is_valid():
post.save()
return redirect('Edit Menu', context)
else:
return redirect('Edit Menu', context)
else:
return render(request, 'mis446/edit-menu-item.html', context)
else:
return render(request, 'mis446/edit-menu-item.html', context)
, и теперь я получаю эту ошибку: NoReverseMatch в / edit-menu / edit / Reverse for 'Редактировать меню' с аргументами '({' object_list ':,,,,,,,]>},)' не найдено. Попробован 1 шаблон (ов): ['edit \ -menu / $']
Этот список является списком продуктов.
Самое новое редактирование:
Сейчас он принимает значений, но вместо того, чтобы обновлять форму цены в базе данных, она просто помещает цену в столбец цены без имени или слагаемого. По сути, это просто добавление, а не замена данных.
forms.py:
class ProductModelForm(forms.ModelForm):
class Meta:
model = Product
fields = ['price']
Views.py:
def edit_menu(request):
queryset = Product.objects.all()
context = { "object_list": queryset }
if request.method == 'POST':
post=ProductModelForm(request.POST)
if request.POST.get('price'):
if post.is_valid():
post.save()
return redirect('Edit Menu Item')
else:
return redirect('Edit Menu Item')
else:
return render(request, 'mis446/edit-menu-item.html', context)
else:
return render(request, 'mis446/edit-menu-item.html', context)
HTML:
<div class = "container">
<form method = "post">
{% csrf_token %}
<select>
{% for instance in object_list %}
<option name = "name">{{ instance.name}}: ${{ instance.price }}</option>
{% endfor %}
</select>
<input type="number" name="price" value = '{{ instance.price }}'/><br>
<button type ="submit">Submit Changes</button>
</form>
</div>