Django: Нулевое значение в столбце "category_id" отношения "APIs_api" нарушает ограничение not-null

Я пытаюсь сохранить данные в базе данных PostgreSQL, но, похоже, получаю ошибку на category_id column that it's null. Все остальные данные, кажется, передаются правильно, но я продолжаю получать эту ошибку.

Null value in column "category_id" of relation "APIs_api" violates not-null constraint    
DETAIL:  Failing row contains (1, Twilio SMS, Twilio's Programmable SMS API helps you add 
robust messaging cap..., Twilio's Programmable SMS API helps you add robust messaging cap..., 1, null).

В данном случае 1 относится к идентификатору пользователя. Ссылка на category_id, похоже, является проблемой. Категория, о которой идет речь, - это SMS с идентификатором 34. Таким образом, category_id должен быть 34, поскольку у меня 47 категорий. Я не могу найти решение в Интернете, так как во многих руководствах администратор вводит элементы из панели администратора, которые имеют Category в качестве внешнего ключа. Я хочу добиться этого через форму. У меня есть 2 модели, API & APICategory

Вот мой Models.py

from django.db import models
from django.contrib.auth.models import User
from django.template.defaultfilters import slugify

class API(models.Model):
    api_name = models.CharField(max_length=30, default='', unique=True, verbose_name="API Name")
    short_description = models.CharField(max_length=250, default='', unique=True, verbose_name="Short Description")
    full_description = models.TextField(default='', unique=True, verbose_name="Full Description")
    category = models.ForeignKey(APICategory, on_delete=models.CASCADE, verbose_name='API Category', default='')
    added_by = models.ForeignKey(User, on_delete=models.CASCADE, verbose_name='Added By')

    def __str__(self):
        return self.api_name

    class Meta:
        verbose_name_plural = "APIs"

class APICategory(models.Model):
    category = models.CharField(max_length=100, choices=API_CATEGORIES, default=API_CATEGORIES[0][0], verbose_name='API Categories')
    slug = models.SlugField(blank = True, null= True)

    def __str__(self):
        return self.category

    class Meta:
        verbose_name_plural = "API Categories"

My Forms.py

class AddAPIForm(forms.ModelForm):
    class Meta:
        model = API
        fields = '__all__'
        exclude = ['added_by']

Мой Views.py

from django.shortcuts import render, redirect,reverse
from django.contrib import messages
from .models import API, APICategory
from django.contrib.auth.models import User
from .forms import AddAPIForm

def Add_API(request):
    user = User.objects.get(username=request.user)
    form = AddAPIForm(request.POST, request.FILES, instance=request.user)

    if request.method == 'POST':
        context = {'has_error': False, 'data': request.POST}
        user = user.id
        api_name = request.POST.get('api_name')
        short_description = request.POST.get('short_description')
        full_description = request.POST.get('full_description')

        if API.objects.filter(api_name=api_name).exists():
            messages.error(request, '⚠️ This API already exists! Please dd another one')
            return redirect('Add_API')

        if API.objects.filter(short_description=short_description).exists():
            messages.error(request, '⚠️ This Short Description already exists on another API! Please write something unique')
            return redirect('Add_API')

        if len(short_description) > 250:
            messages.error(request, '⚠️ Your Short Description exceeds 250 Characters! Please write something unique')
            return redirect('Add_API')

        if API.objects.filter(full_description=full_description).exists():
            messages.error(request, '⚠️ This Full Description already exists on another API! Please write something unique')
            return redirect('Add_API')

        api_obj = API.objects.create(api_name=api_name, short_description=short_description, full_description=full_description, 
            category_id=category, added_by_id=user).save()

        if not context['has_error']:
            messages.success(request, '✅  API Information Successfully Added!')
            return redirect('Add_API')

        else:
            messages.error(request, '⚠️ API Information Unsuccessfully Added!')
            return redirect('Add_API')

    context = {'form':form, 'user':user}
    return render(request, 'Add API.html', context)

Я знаю, что не определил категорию в category_id=category. Это потому, что я не могу получить ID/PK категории SMS, поскольку именно это здесь и требуется. Любая помощь в этом вопросе была бы очень признательна. Спасибо

Вернуться на верх