我试图为餐厅应用创建数据库面板,用户可以在其中添加,删除,查看和创建餐厅菜单。用户可以在其中添加名称,美食,类别(蔬菜/非蔬菜)和成本作为菜单项的详细信息。
这是我的 Models.py :< br />
class Cuisine(models.Model):
cuisine = models.CharField(max_length=15)
def __str__(self):
return self.cuisine
class Meta:
verbose_name_plural = 'cuisines'
class Category(models.Model):
category_type = models.CharField(max_length=9)
def __str__(self):
return self.category_type
class Meta:
verbose_name_plural = 'category type'
class Item(models.Model):
name = models.CharField(max_length=50)
cost = models.IntegerField()
cuisine = models.ForeignKey(Cuisine, on_delete=models.CASCADE)
category = models.ForeignKey(Category, on_delete=models.CASCADE)
def __str__(self):
return self.name
这里是 Forms.py :
class ItemForm(forms.ModelForm):
class Meta:
model = Item
fields = ['name', 'cost']
class CategoryForm(forms.ModelForm):
class Meta:
model = Category
fields = ['category_type']
class CuisineForm(forms.ModelForm):
class Meta:
model = Cuisine
fields = ['cuisine']
下面是我的 Views.py :
@login_required()
def add_item(request):
if request.method == 'POST':
itemform = ItemForm(request.POST or None)
catform = CategoryForm(request.POST or None)
cuisineform = CuisineForm(request.POST or None)
if itemform.is_valid():
item = itemform.save(commit=False)
ct = catform.save(commit=False)
cui = cuisineform.save(commit=False)
item.name = request.POST.get('name')
cui.cuisine = request.POST.get('cuisine')
ct.category = request.POST.get('category_type')
item.cost = request.POST.get('cost')
item.save()
ct.save()
cui.save()
messages.success(request, 'Item added successfully!!')
else:
messages.warning(request, 'Unable to add the item.')
return redirect('add_item')
else:
item_list = ItemList.objects.all()
category = Category.objects.all()
cuisine = Cuisine.objects.all()
context = {
'items': item_list,
'category': category,
'cuisine': cuisine
}
return render(request, 'add_item.html', context)
我能够从django管理面板中添加添加菜单项,但是在从用户端将数据保存到数据库时出现错误,因为我想授予用户添加项的权限。我无法使用 .save() 选项保存表单。
我知道错误在我的 forms.py 中,但我不知道我是Django的新手。我将附加错误的屏幕截图以及我添加数据的前端页面。
请注意,我要使用美食和类别作为数据库中的下拉列表。
答案 0 :(得分:0)
实际上,您正在尝试设置...
ct.category = request.POST.get('category')
并根据您从ct
分配的代码catform.save(commit=False)
。
catform
分配的 CategoryForm(request.POST or None)
并且CategoryForm
具有模型类Category
,但是Category
模型没有像category
这样的任何属性,您正在尝试按以下行设置...
ct.category = request.POST.get('category')
因此,该表格将无效,您将无法保存无效的表格。因此,您的错误来了。