Django обновление других полей учетной записи пользователя через Model Form (при входе в систему в качестве администратора)

Я создаю проект на django, который позволяет пользователям создавать и затем размещать проекты. Приложения включают в себя приложение "пользователи" и приложение "проекты". Я использую @signals, чтобы "пользователи" создавали/редактировали Профиль, а @signals гарантирует, что базовая модель django User всегда синхронизирована с моделью Профиля, содержащейся в приложении "пользователи". У меня есть один профиль для суперпользователя, и он настроен не только на доступ к собственному "профилю пользователя" и "сообщениям проекта", которые он может публиковать, но также настроен на просмотр проектов, опубликованных другими пользователями, прежде чем они будут показаны в публичной ленте "сообщений проекта".
. В модели проекта (в приложении projects models.py) у меня есть поле под названием 'is_approved' со значением по умолчанию false, и "посты проекта" отображаются в публичной ленте только после того, как суперадмин использует свой шаблонный вид формы модели для обновления 'is_approved' с False на True. Каждый "пост проекта" включает поле Profile в качестве внешнего ключа (один ко многим)

Вышеописанное работает очень хорошо - поскольку суперпользователь может быть аутентифицированным пользователем sessionid и при этом обновлять "посты проекта", которые принадлежат другому профилю.

Теперь моя проблема заключается в том, что я пытаюсь сделать все вышеперечисленное, когда вхожу в систему как суперпользователь, но пытаюсь обновить поля в других Профилях (например, 'is_accepted' с False на True) через модель Form.
Мне нужно сделать так, чтобы при редактировании профиля его статус 'is_accepted' возвращался в False, чтобы суперпользователь мог просмотреть профиль, прежде чем он вернется в публичный список профилей. В приведенном ниже коде я сначала проверяю, что именно суперпользователь пытается получить доступ к маршруту к этому шаблону 'admin', и, если это не так, возвращаю его на страницу учетной записи. Для этого я использую переменную 'profilej'. Затем я получаю профиль, который необходимо обновить, и использую для этого переменную 'profileq'. Когда я распечатываю эти данные, они содержат соответствующие значения. 'profilej' содержит суперпользователя, а 'profileq' содержит профиль, который нужно отредактировать.

@login_required(login_url='login')
def editAccountBoss(request, pk):
    profilej = request.user.profile
    print(profilej)
    if profilej.bossnum != 9999:
        return redirect('account')
    profileq = Profile.objects.get(id=pk)
    print(profileq)
    form = ProfileFormBoss(instance=profileq)

В последней строке приведенного выше кода я передаю 'profileq' в переменную формы. Затем эту же "форму" я проверяю и сохраняю в приведенном ниже коде. Проблема, которую я продолжаю получать, заключается в том, что "суперпользователь" (который является аутентифицированным пользователем sessionid) обновляется вместо профиля, который открывается и редактируется. Этот код 'edit profile' работает нормально, когда любой аутентифицированный по sessionid профиль/пользователь обновляет свой собственный профиль, поэтому я не думаю, что он пытается создать дубликат, и все же я получаю следующую ошибку, а за кулисами перед ошибкой поля 'profileq' обновляются для суперпользователя 'profilej'.

вот остальная часть кода:

if request.method == 'POST':
    form = ProfileFormBoss(request.POST, request.FILES, instance=profileq)
   
    websocial = request.POST['social_website']
    #print(websocial[0:8])
    if websocial[0:8] != "https://" and websocial != "":
        messages.error(request, 'Use full web address format: 
         https://www.example.com')
   
    elif form.is_valid():
        profileq = form.save(commit=False)
        profileq.is_accepted = True
        form.save()

        return redirect('acc-boss-dash-profiles')

context = {'form': form}
return render(request, 'users/profile_formboss.html', context)

Вот какую ошибку я продолжаю получать. Я пробовал несколько различных альтернатив (например, profileq.save() и т.д.), но продолжаю получать ту же ошибку:

IntegrityError at /profiles/edit-account/ Сбой ограничения UNIQUE: имя пользователя auth_user.username

А вот базовая модель формы:

class ProfileFormBoss(ModelForm):
class Meta:
    model = Profile
    fields = ['name', 'email', 'username',
              'location', 'bio', 'short_intro', 'profile_image', 'is_accepted', 'social_github', 'social_linkedin', 'social_twitter', 'social_youtube', 'social_website']
    exclude = ['social_github', 'social_linkedin', 'social_twitter',
              'social_youtube'] 
    help_texts = {
        'social_website': 'https://www.example.com',
    }

    widgets = {
        'isaccepted': forms.CheckboxSelectMultiple(),
    }


def __init__(self, *args, **kwargs):
    super(ProfileFormBoss, self).__init__(*args, **kwargs)
    
    for name, field in self.fields.items():
        field.widget.attrs.update({'class': 'input'})
Вернуться на верх