IntegrityError NOT NULL约束失败

时间:2018-04-08 06:06:36

标签: python django

我正在使用Django构建一个简单的博客应用程序。我想实现使用表单添加新博客的功能。出现了一些问题。

这是我的models.py

val = exp(y * sum(theta * random_data_vector)) * y * random_data_vector
val = val / (1 + exp(y * sum(theta * random_data_vector)))
theta = theta - (alpha * val)

forms.py

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

class Blog(models.Model):
    title=models.CharField(max_length=60)
    content=models.TextField()
    author=models.ForeignKey('auth.User',on_delete=models.CASCADE,)
    date=models.DateTimeField(default=timezone.now)
    slug=models.SlugField(null=True,unique=True)

    def save(self, *args, **kwargs):
      self.slug = slugify(self.title)
      super(Blog, self).save(*args, **kwargs)

    def __str__(self):
        return self.title

class UserProfile(models.Model):
    user=models.OneToOneField(User)
    website=models.URLField(blank=True)

    def __str__(self):
        return self.user.username   

views.py

中的add_blog方法
 from django.template.defaultfilters import slugify
 from blog.models import UserProfile
 from django.contrib.auth.models import User

 class BlogForm(forms.ModelForm):
     title=forms.CharField(max_length=60,
                      help_text="blog title")
     content=forms.CharField(help_text="blog content")
     author=forms.CharField(help_text="blog author")
     date=forms.DateTimeField(help_text="blog date")

     class Meta:
         model=Blog
         fields=('title',)
 class UserForm(forms.ModelForm):
     password = forms.CharField(widget=forms.PasswordInput())

     class Meta:
         model=User
         fields = ('username','email','password')
 class UserProfileForm(forms.ModelForm):
     class Meta:
         model=UserProfile
         fields=('website',)

当我想在我的网页中添加新博客时,我无法输入记录。它告诉我

def add_blog(request):    
form=BlogForm()    
if request.method =='POST':
    form=BlogForm(request.POST)
    if form.is_valid():
        form.save(commit=True)
        return index(request)
    else:
        print(form.errors)

return render(request, 'add_blog.html',{'form':form})

有人可以帮我解决这个问题吗?非常感谢!

2 个答案:

答案 0 :(得分:1)

在您的模型中,您的Blog课程要求:

  1. 标题
  2. 类型为auth.User
  3. 的作者
  4. content
  5. 第一步是从表单中删除作者字段:

    class BlogForm(forms.ModelForm):
         title=forms.CharField(max_length=60,
                          help_text="blog title")
         content=forms.CharField(help_text="blog content")
         # author=forms.CharField(help_text="blog author")
         date=forms.DateTimeField(help_text="blog date")
    
         class Meta:
             model=Blog
             fields=('title','content','date')
    

    接下来,是在视图中添加登录用户作为作者:

    from django.shortcuts import redirect
    from django.contrib.auth.decorators import login_required
    
    # makes sure this view is called with a valid user
    # https://docs.djangoproject.com/en/2.0/topics/auth/default/#the-login-required-decorator
    @login_required
    def add_blog(request):    
       form = BlogForm(request.POST or {})    
       if form.is_valid():
            temp = form.save(commit=False)
            temp.author = request.user # add the logged in user, as the
                                       # author
            temp.save()
            return redirect('/')
       return render(request, 'add_blog.html',{'form':form})
    

答案 1 :(得分:0)

查看此问题的另一种方法...也许您可以尝试清除迁移文件,然后重新运行null=True以查看它是否可以捕获有关您的模型的任何内容。它可能会要求您提供某些字段的默认值;这应该响铃,在适当的时候分配names = ",".join(r'\"{}\"'.format(name) for name in list_names) print(names) #\"Alex\",\"John\",\"Joseph J\" print('Hi my name is ({})'.format(names)) #Hi my name is (\"Alex\",\"John\",\"Joseph J\") 。就个人而言,这对我来说是一个非常普遍的完整性冲突(我对框架不熟悉),特别是当我在同一个数据库中对模型进行了许多计划外模拟时。