このサイトで多くの検索を行い、私の質問の一部を見つけましたが、私は見つけられません。たぶん、私は適切なキーワードを使用していないとこれはよくある質問ですか?もしそうなら、謝罪してください。入力がDjangoの行と一致するときに既存のデータベースの値を変更するには
私は、barcode_inputという名前の入力値とフォームのbarcodeというモデルフィールドを一致させようとしています。 一致するものがあれば、ターミナルにprint( "There is a match!")と表示されます。
次のステップは、一致がある場合、特定のモデルamount_soldフィールドから減算された特定のモデル売却フィールド(一致するもの)にamount_input値を追加する必要がありますマッチです)。
これは、これまでの私のコードです。
models.py
from django.db import models
class AddProduct(models.Model):
title = models.CharField(max_length=255)
barcode = models.IntegerField(default=0, primary_key=True)
stock_amount = models.IntegerField(default=0)
sold = models.IntegerField(default=0)
def __str__(self):
return self.title
class Meta:
verbose_name_plural = "Products"
forms.py
from django import forms
from .models import AddProduct
class ScanProductForm(forms.Form):
barcode_input = forms.IntegerField(label='scan barcode')
amount_input = forms.IntegerField(label='amount')
def clean(self):
cleaned_data = super(ScanProductForm, self).clean()
barcode_input = cleaned_data.get("barcode_input")
amount_input = cleaned_data.get("amount_input")
try:
p = AddProduct.objects.get(pk=barcode_input)
p.sold += amount_input
except AddProduct.DoesNotExist:
raise forms.ValidationError("Does not exist")
views.py
from django.shortcuts import render
from .forms import ScanProductForm
from .models import AddProduct
def scan_product_view(request):
if request.method == 'POST':
form = ScanProductForm(request.POST or None)
if form.is_valid():
print("There is a match!")
else:
form = ScanProductForm()
return render(request, 'scanapp/barscan.html', {'form': form})
おかげでたくさんの、魅力のように働きました。これは私のdjango/pythonの語彙を広げます:-)また、views.pyのロジックを行うための提案に感謝します! – sandermander
お手伝いをしてうれしいです。 –