Django形式:将用户设置为登录用户

时间:2019-11-17 19:21:51

标签: django django-forms

我正在尝试创建一个通讯录网站,登录的用户可以在其中填写表格并存储联系方式。我能够实现登录和注销功能。但是问题是我无法将用户名设置为当前登录用户。这是到目前为止我已经实现的:

Models.py

class UserProfileInfo(models.Model):

    user = models.OneToOneField(User,on_delete=models.CASCADE,primary_key=True)

    #additional

    def __str__(self):

        return self.user.usernname

class UserContacts(models.Model):

    current_user = models.ForeignKey(User,on_delete=models.CASCADE)
    first_name = models.CharField(max_length = 150)
    last_name = models.CharField(max_length = 150)
    phone_number = models.CharField(max_length = 150)
    email_address = models.CharField(max_length = 150)
    street_address = models.CharField(max_length = 350)

    def __str__(self):

        return '{}'.format(self.first_name)

Forms.py

class UserForm(forms.ModelForm):

    password = forms.CharField(widget = forms.PasswordInput())

    class Meta():
        model = User
        fields = ('username','email','password')

class UserContactForm(forms.ModelForm):

    class Meta():
        model = UserContacts
        fields = "__all__"

views.py:

@login_required
def new_contact(request):


    form = UserContactForm()

    current_user = request.user.get_username()
    user = User.objects.filter(username=current_user).first()
    output = UserContacts.objects.filter(current_user_id=user.id).first()

    if request.method == "POST":
        form = UserContactForm(request.POST)

        if form.is_valid():
            form.save(commit=True)
            return index(request)
        else:
            print('Error Form Invalid')

    return render(request,'basic_app/contact.html',{'form':form})

这是登录用户尝试输入联系信息的详细信息:

Updating contact screenshot。如您所见,当前用户必须选择其用户名才能填写联系信息。

如何解决此问题,默认情况下,将表单中的用户名设置为当前登录用户

1 个答案:

答案 0 :(得分:0)

更改您的UserContactForm以在__init__中包括一个额外的性能表,并在user字段上设置初始值:

class UserContactForm(forms.ModelForm):

    class Meta():
        model = UserContacts
        fields = "__all__"

    def __init__(self, *args, **kws):
        # To get request.user. Do not use kwargs.pop('user', None) due to potential security hole
        self.user = kws.pop('user')
        super().__init__(*args, **kws)
        self.fields['user'].initial = self.user

然后查看您要更改的内容,以将request.user添加到表单结构中:

@login_required
def new_contact(request):


    form = UserContactForm(user=request.user)

    current_user = request.user.get_username()
    user = User.objects.filter(username=current_user).first()
    output = UserContacts.objects.filter(current_user_id=user.id).first()

    if request.method == "POST":
        form = UserContactForm(request.POST, user=request.user)

        if form.is_valid():
            form.save(commit=True)
            return index(request)
        else:
            print('Error Form Invalid')

    return render(request,'basic_app/contact.html',{'form':form})

您可能会删除:

    current_user = request.user.get_username()
    user = User.objects.filter(username=current_user).first()
    output = UserContacts.objects.filter(current_user_id=user.id).first()