【问题标题】:How to update a single column in a subset of database table records using Django form or ModelForm?如何使用 Django 表单或 ModelForm 更新数据库表记录子集中的单个列?
【发布时间】:2013-11-26 11:07:43
【问题描述】:

我有一个 django 应用程序核心。它有一个模型验证,可以存储 8 列的记录。我得到数据库记录中的每一行都有一个空列。我想稍后使用 django 表单或模型表单为记录子集更新此空列。我不想更改任何其他列值。

例如,我总共有 100 条记录,其中有一个空列,可以说是“产品详细信息”。我想更新最后 10 行的产品详细信息列。使用 Django 表单或 modelForm。

这是我的应用程序的 models.py、forms.py 和 views.py 代码:

models.py

class Verification(models.Model):
asset_code = models.CharField(verbose_name="Asset Code",max_length=16, default="")
scan_time=models.DateTimeField(verbose_name="Time of smartDNA scan",auto_now_add=True,default=datetime.datetime.now)
credential = models.CharField(verbose_name="smartDNA Credential",max_length=16, default="")
status=models.IntegerField(verbose_name="Scanning Status",choices=STATUS_CHOICES,default=1)
operator = models.CharField(verbose_name="Operator",max_length=16, default="")
location = models.CharField(verbose_name="Branch",max_length=64, default="")
auth_code = models.CharField(verbose_name="Scanner Authentication",max_length=20, default="DSC(Verisign")
emp_id = models.CharField(verbose_name="EMP ID",max_length=16, default="")
image = models.CharField(verbose_name="Image",max_length=24, default="dd")
created=models.DateTimeField(verbose_name="Created on",blank=True,auto_now_add=True)
modified=models.DateTimeField(verbose_name="Modified on",blank=True,auto_now=True)
product_details= models.CharField(verbose_name="Product Details",max_length=64, default="")

forms.py

class UpdateDetailsForm(forms.Form):
    asset_code = forms.CharField(max_length=16)
    asset_code = forms.CharField(max_length=16)
    product_details = forms.CharField(max_length=64)

views.py

def update_details(request):
   if request.method == "POST":
    if 'search' in request.POST:
            form = UpdateDetailsForm(request.POST)
            if form.is_valid:
               product_details=form.cleaned['product_details']
   return render_to_response('update_details.html',
                {'form':UpdateDetailsForm(),},
                context_instance=RequestContext(request))

我想使用表格行的子集更新一列“product_details”。例如从asset_code 10 到asset_code 100。

【问题讨论】:

  • 将要更新的对象作为关键字参数instance 传递给FormClass

标签: python mysql django


【解决方案1】:

您需要使用update queryset 方法。

例如:

verifications = Verification.objects.filter(asset_code__range=(10, 100))
verifications.update(product_details=form.cleaned['product_details'])

【讨论】:

  • 以及如何从用户将提交的表单字段中获取资产代码值(v1,v2)...
  • form.cleaned_data['asset_code'] 只会给你用户输入的内容,但你的表单只有一个 asset_code 字段,就像你写的那样(它是一个定义了两次的字段),你需要命名它们不同(例如“asset_code_1”和“asset_code_2”),然后从cleaned_data获取值
猜你喜欢
  • 2012-04-18
  • 2014-11-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-10
相关资源
最近更新 更多