python - 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)
解决方案
通常,您应该将create
andupdate
放在单独的视图中。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})
推荐阅读
- javascript - 无法访问 handleEvent 函数中的更新状态 | 反应钩子
- r - 基于(变化的)虚拟变量对 ggplot 的部分进行着色
- maven -
在 Maven 设置 xml 中 - python - 如何并行运行多个 DataFrame.to_csv()?(多线程)
- python - Python如何更改数据框格式
- memory - 将字符串放在闪存上的固定内存地址中
- javascript - JavaScript 不会保存所有的 cookie 数据
- constraints - Papyrus - 验证属性的 OCL 约束
- mysql - 在 Talend 中将所有 MYSQL 组件转换为 Greenplum 组件
- android - Zebra Datawedge 6.2.24 启用/禁用在 Zebra TC75 上不起作用