Django 自定义管理:“管理员”无法更新用户

时间:2021-04-18 07:43:02

标签: django django-views django-forms django-templates

我目前正在为 web 应用程序创建一个 django 客户管理/管理界面(我知道内置的,但作为这个项目的一部分,需要创建一个自定义的)。 我应该能够从这个界面创建/更新/删除用户,同时作为经理/管理员连接。 以管理员/管理员身份连接时,我可以成功创建或删除用户,但无法更新用户(我不断收到用户“已存在”的错误消息) 由于我已经为此苦苦挣扎了一段时间并且被自动取款机阻塞,因此非常感谢您的帮助或遵循的正确方向。

以下是代码。

(models.py) 类 UserProfile(一对一内置 Django User 类)

class UserProfile(models.Model):
    """
    The Class UserProfile extends the built-in "User" class of Django
    Used here to add extra fields in the forms 
    """
    user = models.OneToOneField(User, on_delete=models.CASCADE,verbose_name="User")
    vpn_enabled = models.BooleanField(default=False, verbose_name="VPN Enabled")
    language = models.CharField(max_length=2, choices=LANGUAGES, default='EN', verbose_name="Language")
    birth_date = models.DateField(null=True,blank=True, verbose_name="Birth Date")
    address = models.CharField(max_length=200, null=True, blank=True, verbose_name="Address")
    postal_code = models.CharField(max_length=50,null=True, blank=True, verbose_name="Postal Code")
    country = models.CharField(max_length=20, blank=True, null=True, verbose_name="Country")

    class Meta:
        verbose_name = 'User Profile'
        verbose_name_plural = 'User Profiles'

    def __str__(self):
        return self.user.username

views.py

@group_required('Administrator', 'Manager')
def update_user(request, id):  
    user = User.objects.get(id=id)  
    user_update_form = UserUpdateForm(request.POST or None, instance = user) 
    user_profile_update_form =  UserProfileUpdateForm (request.POST or None, instance = user.userprofile) 
    if user_update_form.is_valid() and user_profile_update_form.is_valid(): 
        user_update_form.save()  
        user_profile_update_form.save()
        return redirect("manager_home")  
    
    context = {
        'user_update_form': user_update_form,
        'user_profile_update_form': user_profile_update_form,
    }    
    return render (request, "update_user.html", context) 

forms.py

class UserUpdateForm(forms.ModelForm):
    """UserUpdateForm custom made class"""

    class Meta:
        """ Meta definitioon of UserUpdateForm"""

        model = User
        fields = [
            'username',
            'last_name',
            'first_name',
            'email',
        ]

class UserProfileUpdateForm(forms.ModelForm):
    '''UserProfileUpdateForm custom made class'''

    class Meta:
        """Meta definition of UserProfileUpdateForm"""

        model = UserProfile
        fields = [
            'language',
            'birth_date',
            'address',
            'postal_code',
            'country',
        ]

模板

<!-- template update_user.html -->
{% extends 'base.html' %}
{% block title %} Edit User {% endblock %}

{% block content %}
<form method="POST" class="post-form" action="{% url 'update_user' user.id %}"> 
{% csrf_token %}  
{{user_update_form.as_p}}
{{user_profile_update_form.as_p}}
{{user_update_form.errors}}
<hr>
<button type="submit">Update User</button>
</form>
{% endblock  %}

结果(尝试更新时,例如用户国家/地区) enter image description here

1 个答案:

答案 0 :(得分:0)

问题出在视图上。如果您将函数用作视图,则需要明确说明在 post 请求的情况下您要做什么,否则所有内容都将作为 GET 请求处理,这不是您想要的。

@group_required('Administrator', 'Manager')
def update_user(request, id):  
    if request.method == 'GET':
        # get request processing code
    # you are missing POST request processing part
    if request.method == 'POST':
        # post request processing code