Ausgabe
Ich bin neu bei Django und versuche, beim Laden der Seite ein Zahlenfolgefeld zu erstellen, die Kombination aus aktuellem Datum und aktuellem Benutzernamen + Anzahl (seine Beiträge in diesem Monat) + 1 . Um dies zu erreichen, verwende ich initial .
Formen.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'
})
in utils.py die Definition von 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
Ich konnte die angemeldete Benutzer-ID nicht von forms.py an getPostNo übergeben, und ich kann auch nicht request.user in utils.py abrufen.
Bitte schlagen Sie den richtigen Weg vor, dies zu tun.
Lösung
Die Lösung ist einfach. Sie müssen nur die Initialisierungsfunktion getPostNo in der Ansicht selbst aufrufen.
post_form = PostForm(initial={'post_no':getPostNo(request.user)})
getPostNr:
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)
Beantwortet von – dej
Antwort geprüft von – Cary Denson (FixError Admin)