簡體   English   中英

django.db.utils.IntegrityError:唯一約束失敗:new__bank_profile.fname_id

[英]django.db.utils.IntegrityError: UNIQUE constraint failed: new__bank_profile.fname_id

我正在嘗試遷移,但發生了此錯誤。

django.db.utils.IntegrityError:唯一約束失敗:new__bank_profile.fname_id

我試圖擴展用戶模型,結果發生了。以下是我的觀點和模型。

我的觀點:

def dashboard(request):
    if request.method=="POST":
        fname = request.POST.get('fname')
        age = request.POST.get('age')
        gender = request.POST.get('gender')
        address = request.POST.get('address')
        occupation = request.POST.get('occupation')
        bio = request.POST.get('bio')
        img = request.POST.get('img')
        filename = request.POST.get('filename')
        user=profile(fname=fname,age=age,gender=gender,address=address,occupation=occupation,bio=bio,img=img,filename=filename)
        user.save()    
        return render(request, 'bank/index2.html')            
    else:
        return render(request, 'bank/signin.html')

我的模型:

from django.db import models
from django.contrib.auth.models import User
from django.db.models.signals import post_save
from django.dispatch import receiver

class profile(models.Model):
    fname = models.OneToOneField(User,max_length=50,default="",blank=True,null=True,on_delete=models.CASCADE,related_name='fname',unique=True)
    #fname = models.CharField(max_length=500,default="",blank=True,null=True)
    age = models.CharField(max_length=3,default="",blank=True,null=True)
    address = models.CharField(max_length=500,default="",blank=True,null=True)
    occupation = models.CharField(max_length=150, default="",blank=True,null=True)
    bio = models.TextField(max_length=500, blank=True,null=True,default="")
    img = models.ImageField(upload_to='bank/images', default="",blank=True,null=True)
    filename = models.ImageField(upload_to='bank/images', default="",blank=True,null=True)
    GENDER_CHOICES = (
        ('M', 'Male'),
        ('F', 'Female'),
    )
    gender = models.CharField(max_length=1, choices=GENDER_CHOICES, default="",blank=True,null=True)

    def __str__(self):
        return str(self.fname)

您在“if 語句”中定義了變量。 嘗試改變這一點。 嘗試將“if 語句”放在“user.save()”之上。

因為你是擴展用戶模式在配置文件中的FNAME不應該空值FNAME場就像剖面模型的主鍵主鍵不應該是空白 因此,刪除fname字段上的空白 truenull tr​​ue

認為的另一個問題是,用戶在創建配置文件時不應表單提供主鍵 用戶應該自動來自請求對象。 request.user.id 這是我猜的最佳實踐,而不是:-

這不好

fname = request. Form.get('fname')

刪除它並在用戶創建配置文件時將經過身份驗證的request.user直接提供給配置文件模型

“如果您從運行的第一個 migrate 命令開始就沒有開始使用自定義用戶模型,那么您將陷入困境,因為 User 在內部與 Django 的其余部分緊密交織在一起。切換到一個具有挑戰性的自定義用戶模型中期項目。許多人混淆的一點是自定義用戶模型僅在 Django 1.5 中添加。在那之前,推薦的方法是向 User 添加 One-ToOneField53,通常稱為 Profile 模型。你會經常在較舊的項目中看到這種設置。但現在使用自定義用戶模型是更常見的方法。但是,與 Django 相關的許多事情一樣,有實現選擇:要么擴展 AbstractUser54 保留默認用戶字段,要么權限或擴展 Ab-stractBaseUser55,它更精細、更靈活......” 摘自 Django for Professionals by William s. 文森特

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM