Django 'str' 对象没有属性 'field' 上下文

Django 'str' object has no attribute 'field' context

我有一个问题,我收到了这个错误: 'str' 对象没有属性 'field'

这是我的看法:

from django.shortcuts import render, redirect, get_object_or_404
from django.http import HttpResponse
from .models import Company
from .forms import NewCompanyForm

# Sociétés
def companies_index(request):
    companies_list = Company.objects.order_by('-id')
    context = {
        "companies_index": "active",
        'companies_list': companies_list,
    }
    return render(request, 'companies/index.html', context)

def companies_create(request):
    context = {
        "companies_create": "active",
    }
    if request.method == 'POST':
        form = NewCompanyForm(request.POST)
        if form.is_valid():
            form.save()
            return redirect('companies_index')
    form = NewCompanyForm()

    return render(request,'companies/create.html',context,{'form': form})

def companies_delete(request, pk):
    company = get_object_or_404(Company, pk=pk)
    company.delete()
    return redirect('companies_index')

问题出在 "create" 操作上,我想知道如何将上下文变量和表单变量传递到我的模板。

此致。

谢谢。

尝试以下方法

return render(request,'companies/create.html',{'context':context, 'form': form})

render 的第三个参数是一个字典,所以你想发送给模板的任何东西都应该打包在字典中。这将解决您的问题。

关于渲染方法

渲染(请求,template_name,上下文=None)

context

A dictionary of values to add to the template context. By default, this is an empty dictionary. If a value in the dictionary is callable, the view will call it just before rendering the template.

参考:https://docs.djangoproject.com/en/3.0/topics/http/shortcuts/#render


一个解决方案可能是:

def companies_create(request):
    payload = dict()
    payload['context'] = {
        "companies_create": "active",
    }
    if request.method == 'POST':
        payload['form'] = NewCompanyForm(request.POST)
        if form.is_valid():
            form.save()
            return redirect('companies_index')
    form = NewCompanyForm()

    return render(request,'companies/create.html', payload)

请注意,payload 是您为位置参数 context.

提供的字典

现在您可以毫无困难地将任意数量的上下文变量传递给模板。