vdjkelly
vdjkelly

Reputation: 131

Column 'user_id' cannot be null django

I seek to create a post with a form where a registered user creates and inserts the primary key id in the db but this does not give me the following error Column 'user_id' can not be null

This is my models.py

class posts(models.Model):
    titulo = models.CharField(max_length=180, unique=True)
    slug = models.SlugField(max_length=180, editable=False)
    contenido = models.TextField()
    categoria = models.ForeignKey(categorias)

    user = models.ForeignKey(User)
    tags = models.CharField(max_length=200)
    creado = models.DateTimeField(auto_now_add=True)
    modificado = models.DateTimeField(auto_now=True)

    def save(self, *args, **kwargs):
        self.slug = slugify(self.titulo)
        super(posts, self).save(*args, **kwargs)

    def __str__(self):
        return self.titulo

This is my view.py

def addPosts(request):
     if request.method == "POST":
            form = addPostForm(request.POST)
            if form.is_valid():
                add = form.save(commit=False)
                #add.user = User.objects.get(id=request.user)
                add.save()
                form.save_m2m()
                return HttpResponseRedirect('/')
        else:
            form = addPostForm ()
        ctx = {'form': form}
        return render_to_response('posts/add.html', ctx, context_instance=RequestContext(request))

This is forms.py

class addPostForm(forms.ModelForm):
      class Meta:
            model = posts
            exclude = {'slug','user', 'creado'}

some solution to this problem?

Upvotes: 0

Views: 1029

Answers (2)

FlipperPA
FlipperPA

Reputation: 14311

If tying to the Django built-in user, you're going to want to do it differently from your model:

user = models.ForeignKey(User)

Consider defining this in your settings and instead, use:

user = models.ForeignKey(settings.AUTH_USER_MODEL)

See the documentation here: https://docs.djangoproject.com/en/1.8/topics/auth/customizing/#referencing-the-user-model

This will also future-proof you if you decide to extend the Django base user model in the future.

Upvotes: 0

Sina Khelil
Sina Khelil

Reputation: 1991

Request.user returns the current user object. No need to do a lookup.

add.user = request.user

in your view

Upvotes: 2

Related Questions