gpt4 book ai didi

python - Django IntegrityError-NOT NULL 约束失败 : portfolio_myportfolio.holder_id

转载 作者:太空宇宙 更新时间:2023-11-03 14:28:35 25 4
gpt4 key购买 nike

我正在尝试在 django 中制作一个投资组合管理应用程序。我尝试将持有人作为主 key 。但在这种情况下,新条目会与旧条目重叠。因此,我删除了该数据库并重新开始。现在,当我尝试添加具有登录用户的投资组合时,我收到如下错误:-

IntegrityError-NOT NULL 约束失败:portfolio_myportfolio.holder_id

我还想以这样的方式设置我的数据库:如果用户使用相同的 nsecode 添加相同股票的数量,它应该在上一个条目中添加,而不是创建一个新行。那么,我的场景应该是什么。

由于我对 python 和 django 非常陌生,我的代码不干净,可能只有几行代码,这是不必要的,任何消除此类错误的帮助将不胜感激。

我的模型是

from django.db import models
from django.contrib.auth.models import User

codes=(tuple of tuples)


class MyPortfolio(models.Model):
nsecodes = models.CharField(max_length=10, choices=codes)
quantity = models.PositiveIntegerField()
buyvalue=models.DecimalField(max_digits=15,decimal_places=2)
holder = models.ForeignKey(User, related_name='myportfolio')
# Create your models here.

我的观点。 py 是:

from django.shortcuts import render,redirect,get_object_or_404
from django.views.generic.edit import CreateView
from .models import MyPortfolio
from .forms import AddNewForm
from django.contrib.auth.models import User
from django.contrib.auth.decorators import login_required

def home(request):
return render(request,'home.html')
@login_required
def my_portfolio(request):
if request.user.is_authenticated():
myportfolios=MyPortfolio.objects.filter(holder=request.user)
return render(request, 'my_portfolio.html',{'myportfolios':myportfolios})
@login_required
def add_new_form(request):
if request.user.is_authenticated():
myportfolios = MyPortfolio.objects.filter(holder=request.user)
if request.method=="POST":
form=AddNewForm(request.POST)
if form.is_valid():
myportfolio=form.save()
myportfolio.nsecodes=form.cleaned.data.get('nsecodes')
myportfolio.buyvalue = form.cleaned.data.get('buyvalue')
myportfolio.quantity = form.cleaned.data.get('quantity')
myportfolio.holder=request.user
myportfolio.save()
return redirect('my_portfolio')
else:
form=AddNewForm()

return render(request,'add_new.html',{'form':form,'myportfolios':myportfolios})

我的 forms.py 如下:-

class AddNewForm(forms.ModelForm):
nsecodes=forms.ChoiceField(choices=codes, required=True)
quantity=forms.IntegerField(min_value=1,required=True)
buyvalue=forms.DecimalField(max_digits=10, decimal_places=2,required=True,min_value=.01)

class Meta:
model=MyPortfolio
fields=['nsecodes','quantity','buyvalue']

最佳答案

您在分配外键 ID 之前保存数据

试试这个

       if form.is_valid():
myportfolio=form.save(commit=False)
myportfolio.holder=request.user
myportfolio.save()
return redirect('my_portfolio')

关于python - Django IntegrityError-NOT NULL 约束失败 : portfolio_myportfolio.holder_id,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47466151/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com