首页 > 解决方案 > 异常值:__init__() 得到了一个意外的关键字参数“limit_choices_to”

问题描述

class Account(models.Model):
    username = models.OneToOneField(User, on_delete=models.CASCADE)
    #email =                 models.EmailField(verbose_name="email", max_length=60, unique=True) 
    contact                 = models.CharField(max_length=30, unique=True) 
    fathers_name                = models.CharField(max_length=30) 
    date_of_birth               = models.DateField(null=True)
    address                 = models.TextField(max_length=250) 
    aadhar_number           =models.CharField(max_length=14)
    pan_number           =   models.CharField(max_length=14)
    education           =   models.TextField(max_length=250)
    salary           =   models.IntegerField( default=0)
    department_id           =   models.IntegerField(default= 0)
    designation_id           =   models.IntegerField(default=0)
    GENDER_CHOICES = ((0, 'Male'), (1, 'Female'))
    gender = models.IntegerField(choices=GENDER_CHOICES)
    MARITAL_STATUS_CHOICES = ((0, 'Married'), (1, 'Unmarried'))
    marital_status = models.IntegerField(choices=MARITAL_STATUS_CHOICES)
    USERNAME_FIELD = 'username'

我已将我的 Account 类扩展映射到 User,现在当我尝试添加新帐户时,我的应用程序会根据我的 Account 模型中是否有 USERNAME_FIELD 给出以下两个错误。

  1. 当我没有 USERNAME_FIELD 时:
   Environment:


   Request Method: GET
   Request URL: http://127.0.0.1:8000/admin/ems/account/add/

   Django Version: 3.0.6
   Python Version: 3.8.3
   Installed Applications:
   ['ems',
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles']
   Installed Middleware:
   ['django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware']



   Traceback (most recent call last):
     File "C:\Users\ACER\AppData\Local\Programs\Python\Python38-32\lib\site-packages\django\core\handlers\exception.py", line 34, in inner
       response = get_response(request)
     File "C:\Users\ACER\AppData\Local\Programs\Python\Python38-32\lib\site-packages\django\core\handlers\base.py", line 115, in _get_response
       response = self.process_exception_by_middleware(e, request)
     File "C:\Users\ACER\AppData\Local\Programs\Python\Python38-32\lib\site-packages\django\core\handlers\base.py", line 113, in _get_response
       response = wrapped_callback(request, *callback_args, **callback_kwargs)
     File "C:\Users\ACER\AppData\Local\Programs\Python\Python38-32\lib\site-packages\django\contrib\admin\options.py", line 607, in wrapper
       return self.admin_site.admin_view(view)(*args, **kwargs)
     File "C:\Users\ACER\AppData\Local\Programs\Python\Python38-32\lib\site-packages\django\utils\decorators.py", line 130, in _wrapped_view
       response = view_func(request, *args, **kwargs)
     File "C:\Users\ACER\AppData\Local\Programs\Python\Python38-32\lib\site-packages\django\views\decorators\cache.py", line 44, in _wrapped_view_func
       response = view_func(request, *args, **kwargs)
     File "C:\Users\ACER\AppData\Local\Programs\Python\Python38-32\lib\site-packages\django\contrib\admin\sites.py", line 231, in inner
       return view(request, *args, **kwargs)
     File "C:\Users\ACER\AppData\Local\Programs\Python\Python38-32\lib\site-packages\django\utils\decorators.py", line 43, in _wrapper
       return bound_method(*args, **kwargs)
     File "C:\Users\ACER\AppData\Local\Programs\Python\Python38-32\lib\site-packages\django\views\decorators\debug.py", line 76, in sensitive_post_parameters_wrapper
       return view(request, *args, **kwargs)
     File "C:\Users\ACER\AppData\Local\Programs\Python\Python38-32\lib\site-packages\django\utils\decorators.py", line 43, in _wrapper
       return bound_method(*args, **kwargs)
     File "C:\Users\ACER\AppData\Local\Programs\Python\Python38-32\lib\site-packages\django\utils\decorators.py", line 130, in _wrapped_view
       response = view_func(request, *args, **kwargs)
     File "C:\Users\ACER\AppData\Local\Programs\Python\Python38-32\lib\site-packages\django\contrib\auth\admin.py", line 99, in add_view
       return self._add_view(request, form_url, extra_context)
     File "C:\Users\ACER\AppData\Local\Programs\Python\Python38-32\lib\site-packages\django\contrib\auth\admin.py", line 120, in _add_view
       username_field = self.model._meta.get_field(self.model.USERNAME_FIELD)

   Exception Type: AttributeError at /admin/ems/account/add/
   Exception Value: type object 'Account' has no attribute 'USERNAME_FIELD'

  1. 当我添加 USERNAME_FIELD 时,它显示如下:
    Environment:


    Request Method: GET
    Request URL: http://127.0.0.1:8000/admin/ems/account/add/

    Django Version: 3.0.6
    Python Version: 3.8.3
    Installed Applications:
    ['ems',
     'django.contrib.admin',
     'django.contrib.auth',
     'django.contrib.contenttypes',
     'django.contrib.sessions',
     'django.contrib.messages',
     'django.contrib.staticfiles']
    Installed Middleware:
    ['django.middleware.security.SecurityMiddleware',
     'django.contrib.sessions.middleware.SessionMiddleware',
     'django.middleware.common.CommonMiddleware',
     'django.middleware.csrf.CsrfViewMiddleware',
     'django.contrib.auth.middleware.AuthenticationMiddleware',
     'django.contrib.messages.middleware.MessageMiddleware',
     'django.middleware.clickjacking.XFrameOptionsMiddleware']



    Traceback (most recent call last):
      File "C:\Users\ACER\AppData\Local\Programs\Python\Python38-32\lib\site-packages\django\core\handlers\exception.py", line 34, in inner
        response = get_response(request)
      File "C:\Users\ACER\AppData\Local\Programs\Python\Python38-32\lib\site-packages\django\core\handlers\base.py", line 115, in _get_response
        response = self.process_exception_by_middleware(e, request)
      File "C:\Users\ACER\AppData\Local\Programs\Python\Python38-32\lib\site-packages\django\core\handlers\base.py", line 113, in _get_response
        response = wrapped_callback(request, *callback_args, **callback_kwargs)
      File "C:\Users\ACER\AppData\Local\Programs\Python\Python38-32\lib\site-packages\django\contrib\admin\options.py", line 607, in wrapper
        return self.admin_site.admin_view(view)(*args, **kwargs)
      File "C:\Users\ACER\AppData\Local\Programs\Python\Python38-32\lib\site-packages\django\utils\decorators.py", line 130, in _wrapped_view
        response = view_func(request, *args, **kwargs)
      File "C:\Users\ACER\AppData\Local\Programs\Python\Python38-32\lib\site-packages\django\views\decorators\cache.py", line 44, in _wrapped_view_func
        response = view_func(request, *args, **kwargs)
      File "C:\Users\ACER\AppData\Local\Programs\Python\Python38-32\lib\site-packages\django\contrib\admin\sites.py", line 231, in inner
        return view(request, *args, **kwargs)
      File "C:\Users\ACER\AppData\Local\Programs\Python\Python38-32\lib\site-packages\django\utils\decorators.py", line 43, in _wrapper
        return bound_method(*args, **kwargs)
      File "C:\Users\ACER\AppData\Local\Programs\Python\Python38-32\lib\site-packages\django\views\decorators\debug.py", line 76, in sensitive_post_parameters_wrapper
        return view(request, *args, **kwargs)
      File "C:\Users\ACER\AppData\Local\Programs\Python\Python38-32\lib\site-packages\django\utils\decorators.py", line 43, in _wrapper
        return bound_method(*args, **kwargs)
      File "C:\Users\ACER\AppData\Local\Programs\Python\Python38-32\lib\site-packages\django\utils\decorators.py", line 130, in _wrapped_view
        response = view_func(request, *args, **kwargs)
      File "C:\Users\ACER\AppData\Local\Programs\Python\Python38-32\lib\site-packages\django\contrib\auth\admin.py", line 99, in add_view
        return self._add_view(request, form_url, extra_context)
      File "C:\Users\ACER\AppData\Local\Programs\Python\Python38-32\lib\site-packages\django\contrib\auth\admin.py", line 126, in _add_view
        return super().add_view(request, form_url, extra_context)
      File "C:\Users\ACER\AppData\Local\Programs\Python\Python38-32\lib\site-packages\django\contrib\admin\options.py", line 1638, in add_view
        return self.changeform_view(request, None, form_url, extra_context)
      File "C:\Users\ACER\AppData\Local\Programs\Python\Python38-32\lib\site-packages\django\utils\decorators.py", line 43, in _wrapper
        return bound_method(*args, **kwargs)
      File "C:\Users\ACER\AppData\Local\Programs\Python\Python38-32\lib\site-packages\django\utils\decorators.py", line 130, in _wrapped_view
        response = view_func(request, *args, **kwargs)
      File "C:\Users\ACER\AppData\Local\Programs\Python\Python38-32\lib\site-packages\django\contrib\admin\options.py", line 1522, in changeform_view
        return self._changeform_view(request, object_id, form_url, extra_context)
      File "C:\Users\ACER\AppData\Local\Programs\Python\Python38-32\lib\site-packages\django\contrib\admin\options.py", line 1555, in _changeform_view
        ModelForm = self.get_form(request, obj, change=not add)
      File "C:\Users\ACER\AppData\Local\Programs\Python\Python38-32\lib\site-packages\django\contrib\auth\admin.py", line 80, in get_form
        return super().get_form(request, obj, **defaults)
      File "C:\Users\ACER\AppData\Local\Programs\Python\Python38-32\lib\site-packages\django\contrib\admin\options.py", line 702, in get_form
        return modelform_factory(self.model, **defaults)
      File "C:\Users\ACER\AppData\Local\Programs\Python\Python38-32\lib\site-packages\django\forms\models.py", line 554, in modelform_factory
        return type(form)(class_name, (form,), form_class_attrs)
      File "C:\Users\ACER\AppData\Local\Programs\Python\Python38-32\lib\site-packages\django\forms\models.py", line 252, in __new__
        fields = fields_for_model(
      File "C:\Users\ACER\AppData\Local\Programs\Python\Python38-32\lib\site-packages\django\forms\models.py", line 178, in fields_for_model
        formfield = formfield_callback(f, **kwargs)
      File "C:\Users\ACER\AppData\Local\Programs\Python\Python38-32\lib\site-packages\django\contrib\admin\options.py", line 154, in formfield_for_dbfield
        formfield = self.formfield_for_foreignkey(db_field, request, **kwargs)
      File "C:\Users\ACER\AppData\Local\Programs\Python\Python38-32\lib\site-packages\django\contrib\admin\options.py", line 241, in formfield_for_foreignkey
        return db_field.formfield(**kwargs)
      File "C:\Users\ACER\AppData\Local\Programs\Python\Python38-32\lib\site-packages\django\db\models\fields\related.py", line 1027, in formfield
        return super().formfield(**kwargs)
      File "C:\Users\ACER\AppData\Local\Programs\Python\Python38-32\lib\site-packages\django\db\models\fields\related.py", line 957, in formfield
        return super().formfield(**{
      File "C:\Users\ACER\AppData\Local\Programs\Python\Python38-32\lib\site-packages\django\db\models\fields\related.py", line 419, in formfield
        return super().formfield(**defaults)
      File "C:\Users\ACER\AppData\Local\Programs\Python\Python38-32\lib\site-packages\django\db\models\fields\__init__.py", line 927, in formfield
        return form_class(**defaults)
      File "C:\Users\ACER\AppData\Local\Programs\Python\Python38-32\lib\site-packages\django\forms\fields.py", line 215, in __init__
        super().__init__(**kwargs)

    Exception Type: TypeError at /admin/ems/account/add/
    Exception Value: __init__() got an unexpected keyword argument 'limit_choices_to'

标签: djangodjango-models

解决方案


尝试from django.contrib.auth.models import BaseUser并继承它。

来源在这里


推荐阅读