join() 参数必须是 str 或字节,而不是“dict”——在 Django 中创建具有多表继承的表单

BAT*_*MAN 4 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})
Run Code Online (Sandbox Code Playgroud)

Django 版本:2.2.3
异常类型:TypeError

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

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

追溯

Internal Server Error: /account/newteacher/ Traceback > (most recent call last): File > "/home/zed/PycharmProjects/untitledisbesttitle/venv/lib/python3.6/site-packages/django/core/handlers/exception.py", > line 34, in inner > response = get_response(request) File "/home/zed/PycharmProjects/untitledisbesttitle/venv/lib/python3.6/site-packages/django/core/handlers/base.py", > line 115, in _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", > line 113, in _get_response > response = wrapped_callback(request, *callback_args, **callback_kwargs) File "/home/zed/PycharmProjects/untitledisbesttitle/accounts/views.py", > line 14, in new_teacher > return render(request, {'form': form}) File "/home/zed/PycharmProjects/untitledisbesttitle/venv/lib/python3.6/site-packages/django/shortcuts.py", > line 36, in render > content = loader.render_to_string(template_name, context, request, using=using) File > "/home/zed/PycharmProjects/untitledisbesttitle/venv/lib/python3.6/site-packages/django/template/loader.py", > line 61, in render_to_string > template = get_template(template_name, using=using) File "/home/zed/PycharmProjects/untitledisbesttitle/venv/lib/python3.6/site-packages/django/template/loader.py", > line 15, in get_template > return engine.get_template(template_name) File "/home/zed/PycharmProjects/untitledisbesttitle/venv/lib/python3.6/site-packages/django/template/backends/django.py", > line 34, in get_template > return Template(self.engine.get_template(template_name), self) File > "/home/zed/PycharmProjects/untitledisbesttitle/venv/lib/python3.6/site-packages/django/template/engine.py", > line 143, in get_template > template, origin = self.find_template(template_name) File "/home/zed/PycharmProjects/untitledisbesttitle/venv/lib/python3.6/site-packages/django/template/engine.py", > line 125, in find_template > template = loader.get_template(name, skip=skip) File "/home/zed/PycharmProjects/untitledisbesttitle/venv/lib/python3.6/site-packages/django/template/loaders/base.py", > line 18, in get_template > for origin in self.get_template_sources(template_name): File "/home/zed/PycharmProjects/untitledisbesttitle/venv/lib/python3.6/site-packages/django/template/loaders/filesystem.py", > line 36, in get_template_sources > name = safe_join(template_dir, template_name) File "/home/zed/PycharmProjects/untitledisbesttitle/venv/lib/python3.6/site-packages/django/utils/_os.py", > line 32, in safe_join > final_path = abspath(join(base, *paths)) File "/usr/lib/python3.6/posixpath.py", line 94, in join > genericpath._check_arg_types('join', a, *p) File "/usr/lib/python3.6/genericpath.py", line 149, in _check_arg_types > (funcname, s.__class__.__name__)) from None TypeError: join() argument must be str or bytes, not 'dict' [06/Aug/2019 08:41:05] "GET > /account/newteacher/ HTTP/1.1" 500 120952
Run Code Online (Sandbox Code Playgroud)

bru*_*ers 11

这里:

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

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

return render(request, "yourapp/yourtemplate.html", {'form': form})
Run Code Online (Sandbox Code Playgroud)

与错误消息一起出现的回溯是首先要检查以找出异常发生的位置。