![](/img/trans.png)
[英]django.db.utils.IntegrityError: UNIQUE constraint failed: core_profile.user_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字段上的空白 true和null true 。
您認為的另一個問題是,用戶在創建配置文件時不應在表單上提供主鍵。 用戶應該自動來自請求對象。 像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.