NOT NULL constraint failed: cms_viewcount.session

Я пытаюсь получить ip-адрес пользователя для подсчета просмотров проекта блога, и когда пользователь не вошел в систему, я получаю эту ошибку

integrityError at /article/another-post-to-test-things-out/
NOT NULL constraint failed: cms_viewcount.session

Вот мой views.py

# regular blog details
def blog_detail(request, slug):
    template_name = 'cms/single.html'
    blog = Blog.objects.get(slug=slug)
    msg = False
    form = CommentForm()
    
    ip=request.META['REMOTE_ADDR']
    if not ViewCount.objects.filter(blogview=blog, session=request.session.session_key):
        view=ViewCount(blogview=blog, ip_address=ip, session=request.session.session_key)
        
        view.save()
    blog_views=ViewCount.objects.filter(blogview=blog).count()
    
    if request.user.is_authenticated:
        user = request.user

        if blog.likes.filter(id=user.id).exists():
            msg = True
    context = {'blog': blog, 'msg':msg, 'form':form, "view_count":blog_views,}

    try:
        if request.method == 'POST':
            form = CommentForm(request.POST)
            comment = form.save(commit=False)
            comment.blog = blog
            comment.owner = request.user
            comment.save()


            messages.success(request, 'Your review was successfully submitted!')
            return redirect('blog-detail', slug=blog.slug)
    
        if not request.user or not request.user.is_authenticated:
            
            return render(request, template_name, context)

        else:
            return render(request, template_name, context)
    except:
        return render(request, "cms/login-prompt.html", context)

Вот ошибка на моем браузере также

  view.save() …
Local vars
Variable    Value
blog    
<Blog: Another Post to test things out>
form    
<CommentForm bound=False, valid=Unknown, fields=(body)>

msg 
False
request 
<WSGIRequest: GET '/article/another-post-to-test-things-out/'>
slug    
'another-post-to-test-things-out'
template_name   
'cms/single.html'
view    
<ViewCount:>

Пожалуйста, как я могу исправить эту ошибку, обратите внимание, что все работает нормально, когда пользователь вошел в систему

models.py

#views count models
class ViewCount(models.Model):
    blogview=models.ForeignKey(Blog, related_name="view_count", on_delete=models.CASCADE)
    ip_address=models.CharField(max_length=50)
    session=models.CharField(max_length=50)

    def __str__(self):
        return str(self.ip_address)
    
    #comment model
    class Comment(models.Model):
        owner= models.ForeignKey(User, on_delete=models.CASCADE, null=True)
        blog= models.ForeignKey(Blog, on_delete=models.CASCADE)
        body = models.TextField(null=True, blank=True)
        created = models.DateTimeField(auto_now_add=True)
        id = models.UUIDField(default=uuid.uuid4, unique=True, primary_key=True,editable=False)
        
        class Meta:
            ordering = ['-created']
        
        def __str__(self):
            return str(self.blog)

forms.py, если это необходимо

#comment form
class CommentForm(forms.ModelForm):
    class Meta:
        model = Comment
        fields = ['body']

        labels = {
            'body': 'Add a comment'
        }

    def __init__(self, *args, **kwargs):
        super(CommentForm, self).__init__(*args, **kwargs)

        for name, field in self.fields.items():
            field.widget.attrs.update({'class': 'input'})

Вот снова ошибка

IntegrityError at /article/another-post-to-test-things-out/
NOT NULL constraint failed: cms_viewcount.session

Вы не передаете необходимый аргумент сессии в этой строке:

view=ViewCount(blogview=blog, ip_address=ip, session=request.session.session_key)

Поскольку пользователь не вошел в систему, значение равно Null.

Разрешить значению быть Null:

`session=models.CharField(max_length=50, null = True)`  

Или создайте сессию для анонимного пользователя.

Вернуться на верх