0

我试图为餐厅应用程序创建一个数据库面板,用户可以在其中添加、删除、查看和创建餐厅菜单。在此,用户可以添加名称、美食、类别(蔬菜/非蔬菜)和成本作为菜单项的详细信息。

这是我的Models.py

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 的新手。我附上了错误的屏幕截图以及我添加数据的前端页面。

这是错误:
在此处输入图像描述



这是前端页面:
在此处输入图像描述


请注意,我想使用美食类别作为数据库中的下拉列表。

4

1 回答 1

0

实际上,您正在尝试设置...

ct.category = request.POST.get('category')

并根据您ctcatform.save(commit=False).

catform分配自CategoryForm(request.POST or None)

并且CategoryForm具有模型类Category,但Category模型没有任何属性category,例如您尝试按照以下行设置的属性...

ct.category = request.POST.get('category')

因此,表格将无效,您无法保存无效表格。因此,您的错误来了。

于 2020-03-05T10:47:38.037 回答