Получение аутентифицированного имени пользователя в Django - PullRequest
0 голосов
/ 20 марта 2020

Я использую встроенного пользователя Django, который в моем приложении аутентифицируется и использует какой-то сервис. Теперь моя проблема в том, что я хочу получить имя пользователя текущего пользователя и записать его в базу данных. Здесь я использовал такой метод, который упоминал модель User как ForeignKey, но он назначает базу данных как пустые данные. Но я хочу написать имя текущего пользователя. Вот мои коды:

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)

Ответы [ 2 ]

1 голос
/ 20 марта 2020

Наконец, после нескольких часов поиска, я нашел пакет с именем django -currentuser (ссылка здесь ), который довольно прост в использовании и проект, который я действительно хотел. Этот пакет помог мне получить имя пользователя, вошедшего в систему, и использовать его в качестве поля в модели.

0 голосов
/ 20 марта 2020

Затем вы должны записать 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)

Или попробуйте использовать метод переопределения 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...