简体   繁体   English

django 中的 FOREIGN KEY 约束失败

[英]FOREIGN KEY constraint failed in django

This is my models.py这是我的models.py

from ast import Delete
from email.policy import default
from django.db import models
from django.contrib.auth.models import User


class Euser(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    phone = models.CharField(max_length=10,null=True)
    birthdate = models.DateField(null=True,)
    profile_pic = models.ImageField(null=True, )
    cover_pic = models.ImageField( null=True, upload_to="images/%y")

    def __str__(self):
        return self.phone

views.py视图.py

def editprofile(request, pk):
    return render(request, 'proedit.html')

def submitedit(request):
    if request.method=="POST":

        current_user = request.user.id
        firstname = request.POST.get('firstname') 
        lastname = request.POST.get('lastname')
        username = request.POST.get('username')
        email = request.POST.get('email')
        phone = request.POST.get('mobileno')
        birthdate = request.POST.get('birthdate')
        profile_pic = request.FILES['profile_pic']

       
        print(current_user)
        User.objects.filter(pk=current_user).update(username=username,first_name=firstname,last_name=lastname,email=email)
      
        Euser.objects.filter(pk=current_user).update_or_create(
        phone=phone,birthdate=birthdate,profile_pic=profile_pic,
        defaults={'phone': phone,'birthdate': birthdate,'profile_pic': profile_pic},)

I am trying to update the data from web request.我正在尝试更新来自 web 请求的数据。 i haven't used forms.py.我没有使用过 forms.py。 Do i have to change something?我必须改变什么吗?

You should not search related object with pk of other object.您不应使用其他 object 的pk搜索相关的 object。 Change this:改变这个:

Euser.objects.filter(pk=current_user)

To that:对此:

Euser.objects.filter(user=current_user)

Your function wanted to create new Euser , but you didn't provide User nor its id to the creation process.您的 function 想要创建新的Euser ,但您没有在创建过程中提供User或其id Add user=current_user to update_or_create :user=current_user添加到update_or_create

Euser.objects.filter(pk=current_user).update_or_create(
    phone=phone, birthdate=birthdate, profile_pic=profile_pic, user=current_user,
    defaults={'phone': phone, 'birthdate': birthdate, 'profile_pic': profile_pic},
)

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

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM