Django ModelForm 中选择框的数据 以及 instance 参数

ModelForm 中选择框的数据

print(list(self.fields['customer'].choices)) 
# [('', '---------'), (1, '张飞'), (2, '关羽'), (3, '刘备')]
print(list(self.fields['customer'].widget.choices)) 
# [('', '---------'), (1, '张飞'), (2, '关羽'), (3, '刘备')]

# 修改数据限制显示的内容

# 修改之前的 customer字段的 选项列表
choices_list = [(i.pk, str(i)) for i in self.instance.consultant.customers.all()]
choices_list.insert(0, ('', '---------'))
self.fields['customer'].choices = choices_list

# 修改之前的 consultant 字段的 选项列表
self.fields['consultant'].choices = [(self.instance.consultant.pk,self.instance.consultant.name)]

在内存中创建 包含销售对象的 consultRecord 对象 数据库中没有改数据

# request.user_object 为 中间建中创建的个人对象
obj = models.ConsultRecord(consultant=request.user_object) 
obj.save()  #  新增数据到数据库中

# 通过 instance 传给 ModelForm 对象

instance 参数

# 创建 和 修改  客户的方法
def customer_edit(request, pk=None):
    ''' 创建 和 修改  客户的方法  '''
    # 通过分组 参数 的 id 获取 要修改的对象
    cus_obj = models.Customer.objects.filter(pk=pk).first()
    # 把要修改 的对象通过 instance 传入form组件中   必须为本类的对象
    form_obj = CustomerForm(instance=cus_obj)
    if request.method == 'POST':
        form_obj = CustomerForm(request.POST, instance=cus_obj)
        if form_obj.is_valid():
            # 如果 instance 有对象则是修改数据 没有就是 新增数据
            form_obj.save()
            # 获取到跳转过来的路径 如果有就重定向到此路径
            # return_url = request.GET.get('return_url')
            # if return_url:
            #     return redirect(reverse_url(request, return_url=return_url))

            return redirect(rev_url(request, 'show:public_customer'))

    return render(request, "form_edit.html", {'form_obj': form_obj, 'title': "修改用户" if cus_obj else '添加用户'})
posted @ 2018-12-27 22:12  拐弯  阅读(761)  评论(0编辑  收藏  举报