django - Django:关系“APIs_api”的“category_id”列中的空值违反非空约束
问题描述
我正在尝试将数据保存到我的 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
这种情况下,指的是用户 ID。引用 category_id 似乎是问题所在。有问题的类别是 ID 为 34 的 SMS。所以 category_id 应该是 34,因为我有 47 个类别。我在网上找不到任何解决方案,因为许多教程都有来自管理仪表板的管理输入项,其中有一个类别作为外键。我想通过一个表格来实现这些。我有 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"
我的表格.py
class AddAPIForm(forms.ModelForm):
class Meta:
model = API
fields = '__all__'
exclude = ['added_by']
我的观点.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
. 这是因为我无法获取 SMS 类别的 ID/PK,因为这正是这里所需要的。对此的一些帮助将不胜感激。谢谢
解决方案
推荐阅读
- python - python asyncio as_completed SIGINT 疑惑
- c - C“stdio.h”函数别名/重命名
- tfs - TFS 合并错误,目录不再存在于任何地方
- java - 如何解决类型转换错误(运算符不存在:bigint = bytea)?
- postgresql - 在 postgresql 中更改日志路径
- python-3.x - 如何在模板中显示用户的角色
- c++ - 如何使用 c++ 和 gnuplot 绘制由方程 x(t) = x0+v0*t+1/2 gt^2 (运动方程)描述的粒子自由下落的运动?
- ios - 自动布局混乱
- c# - 字典列表中的字典比较
- npm - 安装包和警告信息