我正在做一个django项目来存储我的日常开支。
models.py:
class BudgetInfo(models.Model):
items= models.CharField(max_length=20)
cost= models.FloatField(blank=False, null=True)
date_added= models.DateField()
user= models.ForeignKey(User, on_delete= models.CASCADE)
view.py:
def login_view(request):
if request.method == 'POST':
form= AuthenticationForm(data=request.POST)
if form.is_valid():
user=form.get_user()
login(request,user)
return render (request, 'tasks_notes/index.html')
def additem_view(request):
name = request.POST['expense_name']
expense_cost = request.POST['cost']
expense_date = request.POST['expense_date']
create=BudgetInfo.objects.create(user= request.user,items=name,cost=expense_cost,date_added=expense_date)
create.save()
return redirect('app')
def signup_view(request):
if request.method == 'POST':
form= RegisterationForm(request.POST)
if form.is_valid():
user=form.save()
login(request,user)
return redirect('login')
else:
form=RegisterationForm()
return render(request, 'tasks_notes/signup.html',{'form':form})
forms.py:
class RegisterationForm(UserCreationForm):
email=forms.EmailField(required=True)
class Meta:
model=User
fields=(
'username',
'first_name',
'last_name',
'email',
'password1',
'password2'
)
def save(self, commit=True):
user=super(RegisterationForm, self).save(commit=False)
user.first_name=self.cleaned_data['first_name']
user.last_name=self.cleaned_data['last_name']
user.email=self.cleaned_data['email']
if commit:
user.save()
return user
我想把每个用户的日常开支存储在自己的模型中。但是每当我试图保存数据时,每个实例(即使是同一个用户(都会被创建。我希望每个用户都有一个模型实例。我怎样才能做到这一点?
create=BudgetInfo.objects.create(user=request.user,items=name,cost=expense_cost,date_added=expense_date)
不要在上面使用.create的表中创建每一行,只需通过筛选当前用户来更新行。
balance = [str(obj.cost) for obj in BudgetInfo.objects.filter(user=request.user)]
从上面的行中,您可以获得登录用户的当前余额。现在,只需使用.update来更新日常支出,而无需为同一用户创建新行。
BudgerInfo.objects.filter(user=request.user).update(cost=int(balance[0]) + expense_cost)
当前登录用户所在的行通过将expense_cost添加到当前余额中进行更新