Невозможно сохранить данные в базе данных в Django с использованием модели и форм - PullRequest
0 голосов
/ 05 марта 2020

Я пытаюсь создать панель базы данных для приложения ресторана, где пользователь может добавлять, удалять, просматривать и создавать меню для ресторана. При этом пользователь может добавить название, кухню, категорию (овощи / овощи) и стоимость в качестве деталей пункта меню.

Вот мой 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. Я прилагаю снимок экрана с ошибкой, а также с моей страницы веб-интерфейса, откуда я добавляю данные.

Вот ошибка:
enter image description here



Вот страница интерфейса:
enter image description here


Обратите внимание, что я хочу использовать Кухня и Категория в качестве раскрывающегося списка из базы данных.

1 Ответ

0 голосов
/ 05 марта 2020

На самом деле вы пытаетесь установить ...

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')

Таким образом, форма будет недействительной, и вы не сможете сохранить недействительную форму. Таким образом, ваша ошибка пришла.

...