在Django中获取经过身份验证的用户名

2024-09-30 18:22:07 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用Django的内置用户,该用户在我的应用程序中进行身份验证并使用一些服务。现在我的问题是,我想获取当前用户的用户名并将其写入数据库。在这里,我使用了这样的方法,将用户模型作为外键提到,但它将作为空数据分配给数据库。但我想写下当前用户的名字。这是我的密码:

views.py

@login_required(login_url='sign_in')
def upload_document(request):
    context = {}
    form = UploadDocumentForm()
    if request.method == 'POST':
        form = UploadDocumentForm(request.POST or None, request.FILES or None)
        if form.is_valid():
            form.save()
            return redirect('index')
    context = {'form':form}
    return render(request, 'upload_document.html', context)

models.py

class OriginalDocument(models.Model):
    document = models.FileField(upload_to='static/original_document', blank=False)
    document_title = models.CharField(max_length=300)
    student_name = models.CharField(max_length=100)
    teacher_name = models.CharField(max_length=100)
    document_type = models.CharField(max_length=100)
    university = models.ForeignKey(University, on_delete=models.CASCADE)
    date_added = models.DateTimeField(auto_now_add = True)
    checked_by = models.ForeignKey(User, on_delete=models.CASCADE)

    def __str__(self):
        return self.document_title

forms.py:

class UploadDocumentForm(ModelForm):
    class Meta:
        model = OriginalDocument
        fields = '__all__'
        exclude = ['date_added', 'checked_by']

    def __init__(self, *args, **kwargs):
        super(UploadDocumentForm, self).__init__(*args, **kwargs)


Tags: 用户pyselfformreturnmodelsrequestdef
2条回答

最后,经过几个小时的搜索,我找到了一个名为django currentuser(link is here)的包,它使用起来非常简单,是我真正想要的项目。这个包帮助我获取登录用户的用户名,并将其用作模型中的字段

然后您必须将save_model写入admin.py中,如下所示

class OriginalDocumentAdmin(admin.ModelAdmin):
    def save_model(self, request, obj, form, change):
        if not change:
            obj.checked_by = request.user
        obj.save()
admin.site.register(OriginalDocument, OriginalDocumentAdmin)

或者使用如下形式的override save()方法进行尝试

class UploadDocumentForm(ModelForm):
    class Meta:
        model = OriginalDocument
        fields = '__all__'
        exclude = ['date_added', 'checked_by']

    def __init__(self, *args, **kwargs):
        self.request = kwargs.pop('request', None)
        super(UploadDocumentForm, self).__init__(*args, **kwargs)

    def save(self, *args, **kwargs):
        obj = super(UploadDocumentForm, self).save(*args, **kwargs)
        if self.request:
            obj.checked_by = self.request.user
        obj.save()
        return obj

相关问题 更多 >