Django表单设置数据

Django表单设置数据,django,forms,Django,Forms,我正在提高我的英语,耐心点 我的表单是一个ModelForm,所有必要的数据都由用户发送,但我希望动态设置字段[“viagem”]和queryset中的最后一个对象 发送数据后如何设置字段 def cadastro(request): dono = Dono.objects.get(user=request.user) if request.method == "POST": form = VendaForm(dono, request.POS

我正在提高我的英语,耐心点

我的表单是一个ModelForm,所有必要的数据都由用户发送,但我希望动态设置字段[“viagem”]和queryset中的最后一个对象

发送数据后如何设置字段

def cadastro(request):
    dono = Dono.objects.get(user=request.user)
    if request.method == "POST":
        form = VendaForm(dono, request.POST)

        # Here I get the necessary data to call my qs
        colocador_id = form["colocador"].value()
        viagem = Colocador.objects.get(pk=colocador_id).viagem_set.last()
       
        # I want something like this
        form["viagem"] = viagem
        
        if form.is_valid():
            form.save()
        else:
            print('error')
            print(form.errors)
    else:
        form = VendaForm(dono)
    context = {"form": form, }
    return render(request, 'dashboard/cadastro.html', context)
打印(form.errors)=>
  • 通过gem
    • 此字段是必需的
,则不应将其添加为表单字段。因此,您可以将其从
模型表单中的
字段中排除,并使用:

from django.contrib.auth.decorators import login_required
from django.shortcuts import get_object_or_404

@login_required
def cadastro(request):
    dono = get_object_or_404(Dono, user=request.user)
    if request.method == 'POST':
        form = VendaForm(dono, request.POST)
        if form.is_valid():
            form.instance.viagem = form.cleaned_data['colocador'].viagem_set.last()
            form.save()
        else:
            print('error')
            print(form.errors)
    else:
        form = VendaForm(dono)
    context = {'form': form, }
    return render(request, 'dashboard/cadastro.html', context)
从django.contrib.auth.decorators导入登录名\u必需
从django.shortcuts导入获取对象或404
@需要登录
def cadastro(请求):
dono=获取对象或404(dono,user=request.user)
如果request.method==“POST”:
form=VendaForm(dono,request.POST)
如果form.is_有效():
form.instance.viagem=form.cleaned_data['colocador'].viagem_set.last()
form.save()
其他:
打印('错误')
打印(表单错误)
其他:
形式=VendaForm(dono)
上下文={'form':形式,}
返回渲染(请求'dashboard/cadastro.html',上下文)

注意:使用, 然后直接使用。如果对象不存在, 例如,由于用户自己更改了URL,
get\u object\u或_404(…)
将返回HTTP 404 Not Found响应,而使用
.get(…)
将导致HTTP 500服务器错误


注意:您可以将视图限制为具有


那么您不应该将其作为表单字段包含。你能分享一下表格吗?