Получение текущего имени пользователя в utils.py django

Я новичок в django, пытаюсь создать поле последовательности чисел при загрузке страницы, комбинация текущей даты + текущее имя пользователя + count(его сообщения в этом месяце) + 1 . Для этого я использую initial .
forms.py

  class PostForm(ModelForm): 
       post_no = forms.CharField(
        label='Post No',initial=getPostNo,
         widget=forms.TextInput(attrs={
            'class': 'form-control',
            'readonly': 'readonly',
            'placeholder':'Post No'

         })

в utils.py определение getPostNo

def getPostNo:
    from .models import Posts
    m = datetime.now().month
    y = datetime.now().year
    tme = datetime.now().strftime("%d%m%Y")
    cnt = Posts.objects.filter(employee_id=1,post_date__month=m,post_date__year=y).count()+1 #here i need to filter using the current user id logged in . i gave 1 for testing
    return tme+str(cnt)+str(current username) //here i need current username

я не смог передать userid зарегистрированного пользователя в getPostNo из forms.py, а также не могу получить request.user в utils.py.

пожалуйста, подскажите правильный способ сделать это. спасибо за любую помощь.

Предполагается, что вы используете встроенную в Django User модель.

Вы можете напрямую использовать request.user который дает текущий экземпляр или id вошедшего пользователя, и request.user.username для имени пользователя, так:

def getPostNo():
    from .models import Posts
    m = datetime.now().month
    y = datetime.now().year
    tme = datetime.now().strftime("%d%m%Y")
    cnt = Posts.objects.filter(employee_id=request.user,post_date__month=m,post_date__year=y).count()+1
    return tme+str(cnt)+str(request.user.username)

Убедитесь, что пользователь вошел в систему.

После нескольких дней борьбы, решение оказалось простым. просто нужно вызвать функцию инициализации getPostNo в самом представлении.

post_form = PostForm(initial={'post_no':getPostNo(request.user)})

getPostNo:

def getPostNo(user):
    from .models import Posts
    m = datetime.now().month
    y = datetime.now().year
    tme = datetime.now().strftime("%d%m%Y")
    cnt = Posts.objects.filter(employee_id=user.pk,post_date__month=m,post_date__year=y).count()+1 
    
    return tme+str(cnt)+str(user.username) 

Спасибо всем

Вернуться на верх