【问题标题】:Unable to edit the django table无法编辑 django 表
【发布时间】:2019-12-25 16:05:35
【问题描述】:

无法执行更新操作。

此函数用于表更新,但代码不允许我在表单中传递实例,因为它不是模型表单。请提出更改建议。

类用户表单(forms.Form):

SHIFT_CHOICES = ( ('D','DAY'), ('N','NIGHT') )
ADMISSION_FORM_STATUS = ( ('Y','YES'), ('N','NO') )
FORM_COMPLETE_STATUS = (  ('Y','YES'), ('N','NO'))
TRAINING_STATUS = ( ('Y','YES'), ('N','NO') )
STATUS = (  ('W','WORKING'), ('OL','ON_LEAVE'),  ('E','EXIT') )

employee_id = forms.CharField(max_length=8,required=False)
employer_id = CompanyModelChoiceField(required=False, queryset=Company.objects.all(), label='Employer', widget=Select2Widget)
name = forms.CharField(max_length=255)
uber_name = forms.CharField(max_length=255, required=False)
mobile = forms.CharField(max_length=20, required=False)

【问题讨论】:

  • 你能展示你的模型和视图吗?
  • 是的,添加了模型

标签: python django django-forms


【解决方案1】:

要将数据与表单字段(不是模型表单)绑定,您必须将包含这些特定字段的字典传递给表单构造函数。 在这种情况下,您需要做的是 获取字典中的表单数据

driver = Driver.objects.get(employee_id = employee_id)
form_data = {'employee_id':driver.employee_id, 'employer_id', driver.employer_id, .., .., .} #all the fields in the form
AddDriverForm(initial=form_data)

然后,在保存数据时,您应该按照创建驱动程序的方式进行操作。

此外,我个人建议您在这种情况下使用模型表单,因为无论如何您都要将数据放入模型中,它肯定会为您省去麻烦。 此外,如果不是什么大问题,您可能会考虑对模型进行规范化。

【讨论】:

  • 我想使用相同的 URL 来添加表单数据和编辑表单,同时编辑它应该带有数据。您建议的更改给出错误“分配前引用的局部变量'employee_id'”。
  • 使用相同的 url 不是问题,ModelForms 也可以。关于错误,如果不看到您所做的更改,我无法告诉您。因为,employee_id 是 Driver 表单中的一个实例字段,所以这是我访问它的唯一地方。您在添加字典时是否确保在它周围使用了引号?
  • 现在没有错误但仍然呈现空白表单。您能否详细说明您的解决方案?
  • 我试图用一个通用的例子来解释,如果这对你有帮助,试试吧。如果不问我到底有什么困难。
  • 我已经添加了一个完整的函数,我在其中放置逻辑 (views.py)。你能检查一下吗??
【解决方案2】:

假设您的模型 (DC) 有一个实例(一个条目):

超级英雄 = 布鲁斯,巴特勒 = 阿尔弗雷德,工程师 = 卢修斯,汽车 = 蝙蝠车

您的表单有 超级英雄、管家、工程师

(请注意我的表单缺少汽车字段)

现在,假设您想将名字 Butler 更改为 Jarvis

instance = DC.objects.get(id=8) #lets consider this as the id of the instance we have 
#what you need to do is save the required data in a dictionary in this case
form_data = {'Superhero':instance.Superhero, 'Butler':instance.Butler, 'Engineer': instance.Engineer } #we haven't passed the car field
#Also I think that passing extra fields must not be an issue but I haven't tried
UpdateForm(form_data)

这将在显示表单时正确呈现数据。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-12-03
    • 2021-09-12
    • 2020-01-22
    • 2018-02-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多