简体   繁体   English

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

[英]null value in column “user_id” violates not-null constraint Django

I know there are a lot of solutions for this problem but they seem a bit different than mine. 我知道有很多解决此问题的方法,但它们似乎与我的有所不同。 Here is my models.py: 这是我的models.py:

from __future__ import unicode_literals

from django.db import models
from django.conf import settings
from django.contrib.auth.models import User
from django.contrib.postgres.fields import HStoreField
# Create your models here.

class Events(models.Model):
    user = models.ForeignKey(settings.AUTH_USER_MODEL)
    name = models.CharField(max_length=32)
    start = models.CharField(max_length=32)
    end = models.CharField(max_length=32)

Very simple table and I want the primary key in Auth_user to be the foreign key in my Events table. 非常简单的表,我希望Auth_user的主键成为我的Events表中的外键。 So of course this would mean that a User has to be logged in and authenticated for this to work. 因此,这当然意味着User必须登录并经过身份验证才能正常工作。 In my views.py I have: 在我的views.py中,我有:

def createEvent(request):
    if request.method == "POST":
        user = request.user
        print (user)        # Check for Authentication
        name = request.POST['name']
        start = request.POST['start']
        end = request.POST['end']
        Events.objects.create(
            name = name,
            start = start,
            end =end,
        )

The print statement will print out the current user logged in. I can confirm that this part does show that a user is logged in and that this user is in the auth_user table with a unique id . print语句将打印出当前登录的用户。我可以确认这一部分的确显示了一个用户已登录,并且该用户位于auth_user表中,具有唯一id However, when I try to submit a form, I get a null value for the user column. 但是,当我尝试提交表单时, user列的值为空。 Any ideas? 有任何想法吗?

Just add the user instance because it's required by Events . 仅添加用户实例,因为Events需要它。 I think you should use DateField or DateTimeField on start and end field. 我认为您应该在开始和结束字段上使用DateFieldDateTimeField Not sure but I think you plan to put a date value there. 不确定,但我认为您打算在其中放置一个日期值。


Events.objects.create(user=request.user, name=name, start=start, end=end)

You should also add a @login_required for your function. 您还应该为函数添加@login_required

My solution is this: 我的解决方案是这样的:


    from django.contrib.auth.models import User
    user = request.user
    user_id = User.objects.get(username=user).pk
    name = request.POST['name']
    start = request.POST['start']
    end = request.POST['end']
    Events.objects.create(
        user_id=user_id,
        name = name,
        start = start,
        end =end,
    )

Is that an alright solution? 这是一个好的解决方案吗? Could there be something better? 会有更好的东西吗?

Making what you have right now work : 使您现在拥有的东西起作用

def createEvent(request):
    if request.method == "POST":
        user = request.user
        print (user)        # Check for Authentication
        name = request.POST['name']
        start = request.POST['start']
        end = request.POST['end']
        # The user has to be included before being saved
        Events.objects.create(name=name, start=start, end=end, user=user)

Some better practices: Using a ModelForm (note there are class based generic views that make this easier too), and the login_required decorator 一些更好的做法:使用ModelForm (请注意,还有基于类的通用视图也使此操作更加容易),以及login_required装饰器

# forms.py
from django.forms import ModelForm
from .models import Event

class EventForm(ModelForm):
    class Meta:
        model = Event
        fields = ('user', 'start', 'end', 'name')

# views.py
from django.contrib.auth.decorators import login_required

@login_required
def create_event(request):
    if request.POST:
        form = EventForm(request.POST)
        if form.is_valid():
            form.save()
    else:
        form = EventForm()
        return render(..., {'form': form})

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 “ user_id”列中的空值违反了非空约束 - null value in column “user_id” violates not-null constraint “ user_id”列中的空值违反了非空约束Django形式 - null value in column “user_id” violates not-null constraint Django form Django:“user_id”列中的 null 值违反非空约束 - Django: null value in column “user_id” violates not-null constraint “user_id”列中的 Django REST POST null 值违反非空约束 - Django REST POST null value in column “user_id” violates not-null constraint 提交表单时,为什么Django在“ user_id”列中引发IntegrityError:null值违反了非null约束? - Why does Django raised IntegrityError :null value in column “user_id” violates not-null constraint when a form is committed? IntegrityError:错误:“ user_id”列中的空值违反了非空约束 - IntegrityError: ERROR: null value in column “user_id” violates not-null constraint “user_id”列中的空值违反了非空约束详细信息: - null value in column "user_id" violates not-null constraint DETAIL: null “user_id”列中的值违反了非空约束 DRF - null value in column "user_id" violates not-null constraint DRF 我如何解决“user_id”列中的错误 null 值违反非空约束? - How i can solve error null value in column “user_id” violates not-null constraint? Django:关系的“id”列中的 null 值违反非空约束 - Django : null value in column "id" of relation violates not-null constraint
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM