У объекта 'CustomUser' нет атрибута 'get'

Я пытаюсь автоматически назначить поле ModelForm в качестве ForeignKey из модели, на которой основана ModelForm. Модель включает ForeignKey, который ссылается на CustomUser.

Я хотел бы сделать автоматическое назначение поля ModelForm, чтобы пользователь, вошедший в систему, мог отправить форму и сохранить данные в базе данных. Я продолжаю получать эту ошибку: У объекта 'CustomUser' нет атрибута 'get'. Я не понимаю, что вызывает эту ошибку. Я указал настройки для моего CustomUser и зарегистрировал модели в файлах администратора для каждого приложения. Кроме того, обе модели отображаются в разделе администратора моего проекта, но когда я сохраняю форму для вошедшего пользователя, я получаю эту ошибку и она не сохраняется в базе данных.

Код ниже для справки:

class CustomUserManager(BaseUserManager):

    def create_user(self, email, password=None):
        if not email:
            raise ValueError('Account must have an email address')
    
        user = self.model(
            email = self.normalize_email(email),     
            )
    
        user.set_password(password)
        user.save(using=self._db)
        return user

    def create_superuser(self, email, password):
        user = self.create_user(
            email = self.normalize_email(email),
            password = password,)

        user.is_admin = True
        user.is_staff = True
        user.is_active = True
        user.is_superuser = True
        user.save(using = self._db)
        return user

class CustomUser(AbstractBaseUser, PermissionsMixin):

    email = models.EmailField(max_length = 100, unique = True)
    first_name = models.CharField(max_length = 50, verbose_name='first name')
    last_name = models.CharField(max_length = 50, verbose_name='last name')
    date_joined = models.DateTimeField(auto_now_add = True, verbose_name='joined')
    last_login = models.DateTimeField(auto_now = True, verbose_name='last login')
    is_active = models.BooleanField(default = True)
    is_admin = models.BooleanField(default=False)
    is_staff = models.BooleanField(default = False)
    is_superuser = models.BooleanField(default=False)

    objects = CustomUserManager()

    USERNAME_FIELD = 'email'
    REQIURED_FIELDS = []

    def get_user_email(self):
        return self.email

    def get_user_name(self):
        return str(self.first_name) + str(self.last_name)

    def has_perm(self, perm, obj = None):
        return self.is_admin

    def has_module_perms(self, app_label):
        return True

Модель:

class FacilityInfo(models.Model):
    email = models.ForeignKey(get_user_model(), on_delete = models.CASCADE)
    num_facilities = models.PositiveBigIntegerField()

    num_one = models.URLField(null = True)
    num_two = models.URLField(null = True)
    num_one_name = models.CharField(max_length = 50, null = True)
    num_two_name = models.CharField(max_length = 50, null = True)
    ess_login = models.CharField(max_length= 200, null = True)
    ess_pw = models.CharField(max_length= 200, null = True)

Модель формы:

class FacilitySetup(forms.ModelForm):

    class Meta:
        model = FacilityInfo
        fields = ('ess_login','ess_pw','num_one','num_one_name','num_two','num_two_name')

    ess_login = forms.CharField(widget=forms.TextInput(
        attrs={
            "placeholder":"Easy Storage Username",
            "class" : "form-control"
        }
    ))

    ess_pw = forms.CharField(widget=forms.TextInput(
        attrs={
            "placeholder":"Easy Storage Password",
            "class" : "form-control"
        }
    ))   

    num_facilities = forms.IntegerField(help_text = "# of Facilities")

    num_one = forms.URLField(widget = forms.URLInput(
        attrs={
            "placeholder":'Facility 1 URL',
            'class': "form-control"
        }
    ))

    num_one_name = forms.CharField(widget=forms.TextInput(
        attrs={
            "placeholder":"Facility 1 Name",
            "class" : "form-control"
        }
    ))

    num_two = forms.URLField(widget = forms.URLInput(
        attrs={
            "placeholder":'Facility 2 URL',
            'class': "form-control"
        }
    ))

    num_two_name = forms.CharField(widget=forms.TextInput(
        attrs={
            "placeholder":"Facility 2 Name",
            "class" : "form-control"
        }
    ))

Вид:

@login_required(login_url="/login/")
def facility_info(request):
    msg = None
    success = False

    if request.method == 'POST':
        form = FacilitySetup(request.user, request.POST)
        if form.is_valid():
            obj = form.save(commit=False) # Return an object without saving to the DB
            obj.email = request.user  # Add an author field which will contain current user's id
            obj.save()

            msg = 'Facility Info Succesfully Saved'
            success = True

        else:
            msg = "Fields are not valid"

    else:
        form = FacilitySetup()

    return render(request, "facilities/settings.html",{"form": form, "msg":msg, "success":success})

Ошибка возврата:

Environment:


Request Method: POST
Request URL: http://127.0.0.1:8000/facilities

Django Version: 3.2.11
Python Version: 3.9.7
Installed Applications:
['django.contrib.admin',
 'django.contrib.auth',
 'django.contrib.contenttypes',
 'django.contrib.sessions',
 'django.contrib.messages',
 'django.contrib.staticfiles',
 'accounts.apps.AccountsConfig',
 'home.apps.HomeConfig',
 'facilities.apps.FacilitiesConfig']
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 "/Users/jack/Desktop/storageapp/lib/python3.9/site-packages/django/core/handlers/exception.py", line 47, in inner
    response = get_response(request)
  File "/Users/jack/Desktop/storageapp/lib/python3.9/site-packages/django/core/handlers/base.py", line 181, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "/Users/jack/Desktop/storageapp/lib/python3.9/site-packages/django/contrib/auth/decorators.py", line 21, in _wrapped_view
    return view_func(request, *args, **kwargs)
  File "/Users/jack/Desktop/storageapp/storageapp/facilities/views.py", line 26, in facility_info
    if form.is_valid():
  File "/Users/jack/Desktop/storageapp/lib/python3.9/site-packages/django/forms/forms.py", line 175, in is_valid
    return self.is_bound and not self.errors
  File "/Users/jack/Desktop/storageapp/lib/python3.9/site-packages/django/forms/forms.py", line 170, in errors
    self.full_clean()
  File "/Users/jack/Desktop/storageapp/lib/python3.9/site-packages/django/forms/forms.py", line 372, in full_clean
    self._clean_fields()
  File "/Users/jack/Desktop/storageapp/lib/python3.9/site-packages/django/forms/forms.py", line 384, in _clean_fields
    value = field.widget.value_from_datadict(self.data, self.files, self.add_prefix(name))
  File "/Users/jack/Desktop/storageapp/lib/python3.9/site-packages/django/forms/widgets.py", line 263, in value_from_datadict
    return data.get(name)
  File "/Users/jack/Desktop/storageapp/lib/python3.9/site-packages/django/utils/functional.py", line 247, in inner
    return func(self._wrapped, *args)

Exception Type: AttributeError at /facilities
Exception Value: 'CustomUser' object has no attribute 'get'
form = FacilitySetup(request.user, request.POST)

Вы передаете request.user своей форме, а также request post. В сигнатуре FacilitySetup указано, что требуется только один аргумент, поэтому я подозреваю, что она рассматривает вашего пользователя как опубликованные результаты формы. Я не вижу, что ваша форма вообще использует request.user, поэтому попробуйте удалить request.user из этой строки.

Вернуться на верх