join()参数必须是str或字节,而不是'dict'-在Django中,通过多表继承的形式创建表单

时间:2019-08-06 08:36:12

标签: python django django-models django-forms

我正在尝试为模型创建一个表单,该表单继承自Django auth.User类

我遇到了这个问题。有没有更好的方法来实现它?

#models.py

class Teacher(User):
    #tutor = models.OneToOneField(User, on_delete=models.CASCADE, parent_link=True)
    department = models.CharField(max_length=100)
    contact_no = models.BigIntegerField()

    def __str__(self):
        return "%s %s" % (self.tutor.first_name, self.tutor.last_name)

#Forms.py
class TeacherForm(forms.ModelForm):
    class Meta:
        model = Teacher
        fields = ('username', 'first_name', 'last_name', 'email', 'contact_no', 'department')

#views.py
def new_teacher(request):
    form = TeacherForm()
    return render(request, {'form': form})
  

Django版本:2.2.3
  异常类型:TypeError

     

异常值:
  join()参数必须是str或字节,而不是'dict'

================================================ =======================

  

回溯

内部服务器错误:/ account / newteacher / Traceback>(最近一次呼叫最近):“文件”>“ /home/zed/PycharmProjects/untitledisbesttitle/venv/lib/python3.6/site-packages/django/core/handlers /exception.py“,>内部的第34行,> response = get_response(request)文件” /home/zed/PycharmProjects/untitledisbesttitle/venv/lib/python3.6/site-packages/django/core/handlers/base。 py“,>第115行,在_get_response中> response = self.process_exception_by_middleware(e,request)File” /home/zed/PycharmProjects/untitledisbesttitle/venv/lib/python3.6/site-packages/django/core/handlers/base .py“,> _get_response中的第113行,> response = wrapd_callback(request,* callback_args,** callback_kwargs)文件“ /home/zed/PycharmProjects/untitledisbesttitle/accounts/views.py”,在new_teacher中的第14行,返回render(request,{'form':form})文件“ /home/zed/PycharmProjects/untitledisbesttitle/venv/lib/python3.6/site-packages/django/shortcuts.py”,>第36行,在render> content中= loader.render_to_string(template_名称,上下文,请求,使用= using)文件>“ /home/zed/PycharmProjects/untitledisbesttitle/venv/lib/python3.6/site-packages/django/template/loader.py”,> 61行,位于render_to_string> template = get_template(template_name,using = using)文件“ /home/zed/PycharmProjects/untitledisbesttitle/venv/lib/python3.6/site-packages/django/template/loader.py”,> get_template中的第15行> return engine.get_template(template_name)文件“ /home/zed/PycharmProjects/untitledisbesttitle/venv/lib/python3.6/site-packages/django/template/backends/django.py”,> get_template> return Template(第34行) self.engine.get_template(template_name),self)File>“ /home/zed/PycharmProjects/untitledisbesttitle/venv/lib/python3.6/site-packages/django/template/engine.py”,> get_template中的第143行>模板,原点= self.find_template(template_name)文件“ /home/zed/PycharmProjects/untitledisbesttitle/venv/lib/python3.6/site-packages/django/template/engine.py”,>第125行,在find_template中>模板= loader.get_t emplate(name,skip = skip)文件“ /home/zed/PycharmProjects/untitledisbesttitle/venv/lib/python3.6/site-packages/django/template/loaders/base.py”,> get_template中的第18行> self.get_template_sources(template_name)中的来源:文件“ /home/zed/PycharmProjects/untitledisbesttitle/venv/lib/python3.6/site-packages/django/template/loaders/filesystem.py”,> get_template_sources中的第36行>名称= safe_join(template_dir,template_name)文件“ /home/zed/PycharmProjects/untitledisbesttitle/venv/lib/python3.6/site-packages/django/utils/_os.py”,>第32行,在safe_join中> final_path = abspath (join(base,* paths))文件“ /usr/lib/python3.6/posixpath.py”,第94行,在join> genericpath._check_arg_types('join',a,* p)文件“ / usr / lib /python3.6/genericpath.py”,第149行,位于_check_arg_types>(函数名称,s。名称)中,来自None TypeError:join()参数必须为str或字节,不是'dict'[06 / Aug / 2019 08:41:05]“ GET> / account / newteacher / HTTP / 1.1” 500 120952

2 个答案:

答案 0 :(得分:1)

这里:

  

/home/zed/PycharmProjects/untitledisbesttitle/accounts/views.py“,>第14行,在new_teacher中   返回render(request,{'form':form})

render()的第二个参数应该是(相对)模板路径:

return render(request, "yourapp/yourtemplate.html", {'form': form})

与错误消息一起进行的追溯是检查以发现异常发生的第一件事。

答案 1 :(得分:0)

就我而言,它没有传递一个参数 request

template_name = 'edx_sysadmin/gitlogs.html'
context = {'data': 'value'}
return render(request, self.template_name, context)


# earlier was missing `request` like
# return render(self.template_name, context)

但是您需要通过检查以找出发生异常的位置来探索您的回溯日志以查看错误的路由原因。