无法创建超级用户,因为django中的一列(外键)不能为空

vxf3dgd4  于 2022-12-20  发布在  Go
关注(0)|答案(1)|浏览(179)

我已经开始了一个django项目,将用户模型从AbstractUser扩展到我的CustomUser模型,这些模型与其他模型有外键关系。当我尝试使用www.example.com创建超级用户时manage.py,它没有创建超级用户。它显示了一个错误--〉django.db.utils.IntegrityError:(1048,“列'cid_id'不能为空”)。
任何帮助都将不胜感激
博客/models.py

from django.db import models
from django.utils import timezone
from django.contrib.auth import get_user_model
from ckeditor.fields import RichTextField 

# Create your models here.
class Category(models.Model):
    cid = models.AutoField(primary_key=True) 
    category_name = models.CharField(max_length=100)

    def __str__(self):
        return self.category_name

class Post(models.Model):
    aid = models.AutoField(primary_key=True)
    image = models.ImageField(default='blog-default.png', upload_to='images/')
    title = models.CharField(max_length=200)
    # content = models.TextField()
    content = RichTextField()
    created = models.DateTimeField(default=timezone.now)
    author = models.ForeignKey(get_user_model(), on_delete=models.CASCADE)
    cid = models.ForeignKey(Category, on_delete=models.CASCADE, verbose_name='specialization') 
    approved = models.BooleanField('Approved', default=False)
    like = models.ManyToManyField(get_user_model(), related_name='likes')

    def __str__(self):
        return self.title

用户/model.py

from django.db import models
from blog.models import Category
from django.contrib.auth.models import AbstractUser 

# Create your models here.
class CustomUser(AbstractUser):
    cid = models.ForeignKey(Category, on_delete=models.CASCADE)
    profile_pic = models.ImageField(default='default_person.jpg', upload_to='profile_pics')

类别模型中的cid是Post和CustomUser模型中的外键。但是当我尝试创建超级用户时,它显示了我上面提到的错误。cid不能为空,因为当用户注册帐户时,他必须在注册表单中选择类别。但是作为超级用户,他不必使用注册表单注册帐户。那么我必须如何解决这个问题呢?

11dmarpk

11dmarpk1#

你可以给予你的cid成为null的能力:

cid = models.ForeignKey(Category, on_delete=models.CASCADE, blank=True, null=True)

为了让普通用户仍然使用cid字段required,您可以尝试调整您的form

class CustomUserForm(forms.ModelForm):    
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.fields['cid'].required = True

    class Meta:
        model = CustomUser
        fields = (...)

否则,如果您使用的是纯html字段,请将required添加到您的input

相关问题