首页 > 解决方案 > Django 在数据库中添加或更新日期

问题描述

我想创建一个具有一些功能的表单:如果尚未使用 GTIN -> 在我的数据库中创建新产品,否则如果 GTIN 已使用 -> 在我的数据库中更新与此 GTIN 对应的 dateExpiry

我的代码如下:

表格.py:

class productForm(ModelForm):
class Meta:
    model = Product
    fields = ['GTIN', 'name', 'price', 'expiryDate']

视图.py:

 def index(request):
    if request.method == "POST":
        form = productForm(request.POST).save()
        return redirect('/cbPlus')
    else :
        form = productForm()

    template = loader.get_template('cbPlus/index.html')
    product = Product.objects.order_by('expiryDate')
    context = {
        'product' : product,
        'form' : form
    }
    return HttpResponse(template.render(context, request=request))

模型.py:

class Product(models.Model):
   GTIN = models.BigIntegerField(unique=True)
   name = models.CharField(max_length=25)
   price = models.FloatField(max_length=25)
   expiryDate = models.DateTimeField(max_length=25)

标签: pythondjangodjango-forms

解决方案


通常,您应该将createandupdate放在单独的视图中。update使用应该传递给视图的primary_key检索已经保存的对象。但在您的情况下,您可以执行以下操作:

def index(request):
    product = Product.objects.filter(GTIN=request.POST['GTIN']).first()
    if product:
        # update
        form = productForm(request.POST, instance=product)
    else:
        # create
        form = productForm(request.POST)
    if form.is_valid():
        form.save()
        return redirect('/')  # Usually redirect after object create or update
    return render(request, 'index.html', {'form': form})

推荐阅读