Получение текущего имени пользователя в 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)
Спасибо всем