提交表单时,为什么 Django 会在“user_id”列中引发 IntegrityError :null 值违反非空约束?

阿尔瓦罗·桑切斯占位符图像

我有一个 UserSession 模型,它创建一个使用 IP 地址和城市数据的会话,以使用 Geip2 填充模型。我设置了一个表单,它接受我希望用户输入的信息,但得到:

**django.db.utils.IntegrityError: null value in column "user_id" violates not-null constraint**

当我提交表格时。对象被创建,但表单采用的信息不会保存到对象中。

意见:

class NewLocationCreateForm(CreateView):
        model = UserSession
        success_url = reverse_lazy('post:index')
        form_class = NewLocationCreateForm



 def form_valid(self, form):
        if form.is_valid():
            roote = Post.objects.filter(owner =self.request.user)
            instance = form.save(commit=False)
            instance.owner = self.request.user
            user_logged_in.send(self.request.user, request=self.request)
        return super(NewLocationCreateForm, self).form_valid(form)


    def get_form_kwargs(self):
        kwargs = super(NewLocationCreateForm, self).get_form_kwargs()
        kwargs['user'] = self.request.user
        return kwargs

问题似乎出现在:

if form.is_valid():
 return super(NewLocationCreateForm, self).form_valid(form) 

Geoip2 的用户会话调用似乎有效,但它不保存表单

表格.py

from .models import  UserSession
from post.models import  Post
from django import forms


class NewLocationCreateForm(forms.ModelForm):

    class Meta:
        model = UserSession
        fields = [
            'g_post',
            'coordinate',
            'place_name'
        ]
    def __init__(self,user=None, *args, **kwargs):
        super(NewLocationCreateForm, self).__init__(*args, **kwargs)
        self.fields['g_post'].queryset = Post.objects.filter(owner=user)

模型.py:

from django.conf import settings
from django.db import models
from django.contrib.contenttypes.models import ContentType
from django.contrib.auth.models import User
from django.db.models.signals import pre_save
from analytics.signals import user_logged_in
from analytics.utils import get_client_city_data, get_client_ip
from post.models import Post
User = settings.AUTH_USER_MODEL


class UserSessionManager(models.Manager):
    def create_new(self, user, session_key=None, ip_address=None, city_data=None):
        session_new = self.model()
        session_new.user = user
        session_new.session_key = session_key
        if ip_address is not None:
            session_new.ip_address = ip_address
            if city_data:
                session_new.city_data = city_data
                try:
                    city = city_data['city']
                except:
                    city = None
                session_new.city = city
                try:
                    country = city_data['country_name']
                except:
                    country = None
            session_new.country = country
            session_new.save()
            return session_new
        return None

class UserSession(models.Model):
    g_post            = models.ForeignKey(Post, on_delete=models.CASCADE, null=True)
    user            = models.ForeignKey(User)
    coordinate      = models.CharField(max_length=1000, blank=True)
    place_name      = models.CharField(max_length=250, blank=True)
    location_photo  = models.ImageField(upload_to='location_image', blank=True)
    updated         = models.DateTimeField(auto_now=True, null=True)
    session_key     = models.CharField(max_length=60, null=True, blank=True)
    ip_address      = models.GenericIPAddressField(null=True, blank=True)
    city_data       = models.TextField(null=True, blank=True)
    city            = models.CharField(max_length=120, null=True, blank=True)
    country         = models.CharField(max_length=120, null=True, blank=True)
    active          = models.BooleanField(default=True)
    timestamp       = models.DateTimeField(auto_now_add=True)

    objects = UserSessionManager()

    def __str__(self):
        city = self.city
        country = self.country
        place_name = self.place_name
        if city and country:
            return f"{city}, {country}"
        elif city and not country:
            return f"{city}"
        elif country and not city:
            return f"{country}"
        return self.place_name    

def user_logged_in_receiver(sender, request, *args, **kwargs):
    user = sender
    ip_address = get_client_ip(request)
    city_data = get_client_city_data(ip_address)
    request.session['CITY'] = str(city_data.get('city', 'New York'))
    session_key = request.session.session_key
    UserSession.objects.create_new(
                user=user,
                session_key=session_key,
                ip_address=ip_address,
                city_data=city_data
                )



user_logged_in.connect(user_logged_in_receiver)
博鲁特

修复 IntegrityError的 @solarissmoke 修复(更改instance.ownerinstance.user旁边,您正在此处user_logged_in()is_valid()方法中触发信号

def form_valid(self, form):
    if form.is_valid():
        roote = Post.objects.filter(owner =self.request.user)
        instance = form.save(commit=False)
        instance.user = self.request.user
        # Here you trigger signal that creates UserSession!
        user_logged_in.send(self.request.user, request=self.request)
    return super(NewLocationCreateForm, self).form_valid(form)

因此,使用 CreateView 创建一个对象,使用此信号创建另一个对象。中删除此行form_valid()

编辑:要包含来自信号的数据,只需添加form_valid()如下:

def form_valid(self, form):
    if form.is_valid():
        roote = Post.objects.filter(owner =self.request.user)
        instance = form.save(commit=False)
        instance.user = self.request.user
        instance.ip_address = get_client_ip(self.request)
        instance.city_data = get_client_city_data(instance.ip_address)
        instance.session_key = self.request.session.session_key
    return super(NewLocationCreateForm, self).form_valid(form)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Django-IntegrityError:“ user_id”列中的空值违反了非空约束

来自分类Dev

“ owner_id”列中/ new空值处的Django IntegrityError违反了非空约束

来自分类Dev

Django 自定义用户模型:IntegrityError:“is_superuser”列中的空值违反了非空约束

来自分类Dev

django.db.utils.IntegrityError:关系“ movie_movie”的列“ author_id”中的空值违反了非空约束,不知道为什么会这样

来自分类Dev

列“ user_id”中的空值违反了Django 1.9中的非空约束

来自分类Dev

列“ user_id”中的Django空值违反了非空约束

来自分类Dev

Django:“ user_id”列中的空值违反了非空约束

来自分类Dev

Django IntegrityError; NOT NULL约束失败

来自分类Dev

Django IntegrityError; NOT NULL约束失败

来自分类Dev

Django IntegrityError NOT NULL 约束失败:accounts_solution.puzzle_id

来自分类Dev

Django-IntegrityError-不是null约束

来自分类Dev

Django Model IntegrityError:NOT NULL约束失败:

来自分类Dev

Django-IntegrityError-不是null约束

来自分类Dev

django.db.utils.IntegrityError:NOT NULL约束失败:users_profile.user_id

来自分类Dev

Django-列中的空值违反了Django Admin中的非空约束

来自分类Dev

Django-列中的空值违反了Django Admin中的非空约束

来自分类Dev

IntegrityError,NOT NULL 约束失败

来自分类Dev

Django - “wins”列中的空值违反了非空约束

来自分类Dev

Createsuperuser django.db.utils.IntegrityError:NOT NULL约束失败

来自分类Dev

IntegrityError:关系“ message”的列“ category_id”中的空值违反了非空约束详细信息:失败行包含

来自分类Dev

Django Runserver失败,并出现django.db.utils.IntegrityError:NOT NULL约束失败:reviewer_post.post_id(AutoField)

来自分类Dev

使用upsert时,“ created_at”列中的空值违反了非空约束

来自分类Dev

JPA - 创建交叉引用条目时出错 - 违反非空约束

来自分类Dev

IntegrityError: NOT NULL 约束失败的原因是什么?

来自分类Dev

IntegrityError:尝试保存模型实例时出现 NOT NULL 约束

来自分类Dev

peewee IntegrityError:NOT NULL约束失败:terms.sets_id

来自分类Dev

* NOT NULL约束处的IntegrityError失败:main_post.owner_id

来自分类Dev

Django makemigrations有效,迁移失败并显示“ django.db.utils.IntegrityError:NOT NULL约束失败”

来自分类Dev

在DRF(django-rest-framework)中,列“ author_id”中的空值违反了非空约束。我该怎么办?

Related 相关文章

  1. 1

    Django-IntegrityError:“ user_id”列中的空值违反了非空约束

  2. 2

    “ owner_id”列中/ new空值处的Django IntegrityError违反了非空约束

  3. 3

    Django 自定义用户模型:IntegrityError:“is_superuser”列中的空值违反了非空约束

  4. 4

    django.db.utils.IntegrityError:关系“ movie_movie”的列“ author_id”中的空值违反了非空约束,不知道为什么会这样

  5. 5

    列“ user_id”中的空值违反了Django 1.9中的非空约束

  6. 6

    列“ user_id”中的Django空值违反了非空约束

  7. 7

    Django:“ user_id”列中的空值违反了非空约束

  8. 8

    Django IntegrityError; NOT NULL约束失败

  9. 9

    Django IntegrityError; NOT NULL约束失败

  10. 10

    Django IntegrityError NOT NULL 约束失败:accounts_solution.puzzle_id

  11. 11

    Django-IntegrityError-不是null约束

  12. 12

    Django Model IntegrityError:NOT NULL约束失败:

  13. 13

    Django-IntegrityError-不是null约束

  14. 14

    django.db.utils.IntegrityError:NOT NULL约束失败:users_profile.user_id

  15. 15

    Django-列中的空值违反了Django Admin中的非空约束

  16. 16

    Django-列中的空值违反了Django Admin中的非空约束

  17. 17

    IntegrityError,NOT NULL 约束失败

  18. 18

    Django - “wins”列中的空值违反了非空约束

  19. 19

    Createsuperuser django.db.utils.IntegrityError:NOT NULL约束失败

  20. 20

    IntegrityError:关系“ message”的列“ category_id”中的空值违反了非空约束详细信息:失败行包含

  21. 21

    Django Runserver失败,并出现django.db.utils.IntegrityError:NOT NULL约束失败:reviewer_post.post_id(AutoField)

  22. 22

    使用upsert时,“ created_at”列中的空值违反了非空约束

  23. 23

    JPA - 创建交叉引用条目时出错 - 违反非空约束

  24. 24

    IntegrityError: NOT NULL 约束失败的原因是什么?

  25. 25

    IntegrityError:尝试保存模型实例时出现 NOT NULL 约束

  26. 26

    peewee IntegrityError:NOT NULL约束失败:terms.sets_id

  27. 27

    * NOT NULL约束处的IntegrityError失败:main_post.owner_id

  28. 28

    Django makemigrations有效,迁移失败并显示“ django.db.utils.IntegrityError:NOT NULL约束失败”

  29. 29

    在DRF(django-rest-framework)中,列“ author_id”中的空值违反了非空约束。我该怎么办?

热门标签

归档