首页 > 解决方案 > 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,因为这正是这里所需要的。对此的一些帮助将不胜感激。谢谢

标签: djangodjango-modelsdjango-viewsdjango-formsforeign-keys

解决方案


推荐阅读