【问题标题】:Django: "NOT NULL constraint failed" .user_idDjango:“NOT NULL 约束失败”.user_id
【发布时间】:2015-06-09 00:50:11
【问题描述】:

所以我创建了一个名为SellPostImage 的模型,这样我就可以将图像上传到模型,即名为SellPost 的帖子,并且我创建了两个名为SellForm 的表单,其中包含标题、类别等。还有另一种处理图像上传的表单,称为SellPostImageSellPost 使用ForeignKeyUser 模型具有多对一关系,SellPostImageSellPost 模型具有OneToOneField 关系(我尝试在@ 上使用ForeignKey 987654332@ 模型,但这对我没有任何改变)

我不断收到错误

Exception Value: NOT NULL constraint failed: esouqbahrain_sellpost.user_id

每当我尝试提交帖子时,填写所有字段并选择图片。

这是我的模型:

class UserProfile(models.Model):
    user = models.OneToOneField(User)
    pictures = models.ImageField(upload_to='profile_images', blank=True)

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

    class Meta:
        verbose_name_plural = "User Profiles"



# Create your models here.
class Category(models.Model):
    name = models.CharField(max_length=128, unique=True)
    views = models.IntegerField(default=0)
    likes = models.IntegerField(default=0)
    slug = models.SlugField(unique=True, default='automatic')

    def save(self, *args, **kwargs):
        self.slug = slugify(self.name)
        super(Category, self).save(*args, **kwargs)

    def __unicode__(self):
        return self.name


    class Meta:
        verbose_name_plural = "Categories"

class SellPost(models.Model):
    user = models.ForeignKey(User)
    title = models.CharField(max_length=128)
    category = models.OneToOneField(Category)
    body = models.CharField(max_length=400)
    price = models.DecimalField(decimal_places=1, max_digits=5, default=0.0)
    views = models.IntegerField(default=0)
    likes = models.IntegerField(default=0)
    slug = AutoSlugField(populate_from='title', unique=True)

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

    def __unicode__(self):
        return self.title

class SellPostImage(models.Model):
    post = models.OneToOneField(SellPost, null=True)
    pictures = models.ImageField(upload_to='post_images', blank=True)

    def __unicode__(self):
        return self.post.title

    class Meta:
        verbose_name_plural = "Post Images"

这是我发布表格的看法:

@login_required
def sell(request):
    if request.method == 'POST':

        sell_form = SellForm(data=request.POST)
        image_form = SellPostImageForm(data=request.POST)


        if sell_form.is_valid() and image_form.is_valid():
            post = sell_form.save()
            post.save()
            img_form = image_form.save(commit=False)
            if 'picture' in request.FILES:
                img_form.pictures = request.FILES['picture']
            img_form.save()

    else:
        image_form = SellPostImageForm()
        sell_form = SellForm()
    return render(request, 'sell.html', {'sell_form': sell_form, 'image_form': image_form})

如果有人需要,这里是表格:

class SellForm(forms.ModelForm):

    title = forms.CharField(max_length=128)
    category = forms.ModelChoiceField(queryset=Category.objects.all().order_by('name'))
    body = forms.CharField(max_length=400, widget=forms.Textarea)
    price = forms.DecimalField(initial=0.0)
    views = forms.IntegerField(widget=forms.HiddenInput(), initial=0)
    likes = forms.IntegerField(widget=forms.HiddenInput(), initial=0)
    slug = forms.CharField(widget=forms.HiddenInput(), required=False)

    class Meta:
        model = SellPost
        fields = ('title', 'category', 'body', 'price',)

class SellPostImageForm(forms.ModelForm):
    class Meta:
        model = SellPostImage
        fields = ('pictures',)

提前谢谢你:)

【问题讨论】:

    标签: python django one-to-many one-to-one


    【解决方案1】:

    您是SellPost 模型需要UserSellForm 表单没有用户字段。你的帖子变量是什么?

    【讨论】:

    • 后变量是什么意思。初学者,对不起。而且我的 SellPost 不是已经有一个用户是“用户”吗?
    • 我的意思是,在填充表单时,经常使用 POST 变量。请参阅stackoverflow.com/questions/3477333/… 您的表单从不创建用户,但由于外键关系,数据库需要一个用户
    • 多亏了你,我修好了!我首先删除了已经发布的帖子和已上传的图片 visa SellPost 和 SellPostImage,然后尝试迁移哪个有效,然后我将 User 模型添加到 SellPost 模型中,就成功了!跨度>
    猜你喜欢
    • 1970-01-01
    • 2019-06-01
    • 2020-03-28
    • 2020-12-19
    • 2016-04-02
    • 2017-11-02
    • 1970-01-01
    • 1970-01-01
    • 2022-08-09
    相关资源
    最近更新 更多