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, поскольку именно это здесь и требуется. Любая помощь в этом вопросе была бы очень признательна. Спасибо