Reputation: 125
I have the following codes:
class Profile(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
...
...
class Category(models.Model):
name = models.CharField(max_length=30)
...
class FooForm(forms.Form):
# how to call 'request.user' here so i can achieve something like the two lines below ???
# user = User.objects.filter(username=request.user).first() <=== GOAL
# profile = Profile.objects.filter(user=user).first() <=== GOAL
categories = list(Category.objects.values_list("name", flat=True))
categories_values = list(zip(topics, topics))
categories = forms.TypedChoiceField(
label="Select a category",
choices=categories_values,
coerce=str,
widget=forms.RadioSelect,
initial=topics[0],
required=True)
def __init__(self, *args, **kwargs):
super(FooForm, self).__init__(*args, **kwargs)
self.helper = FormHelper()
self.helper.form_method = 'post'
self.helper.layout = Layout(InlineRadios('categories'),)
def experience_start(request):
form = FooForm(request.POST)
if request.method == "POST":
if form.is_valid():
# do something
...
else:
form = FooForm()
context = {"form": form}
This work as far as displaying the different categories available in a form so the user can select one of them to compute some result.
Now my issue is that i want to include the possibility to retrieve the current user logged in user, which is usually done in the view using request.user
but because i am using crispy forms
the logic has to be implemented in the forms.py
above and i cant seem to find a solution.
Upvotes: 0
Views: 55
Reputation: 10126
In your views just pass the user to forms like this:
views.py:
def experience_start(request):
form = FooForm(request.POST, user=request.user)
# rest of the code
forms.py:
class FooForm(forms.Form):
user = None
profile = None
# rest of the code
def __init__(self, *args, **kwargs):
super(ExperienceStart, self).__init__(*args, **kwargs)
user = kwargs.pop('user', None)
self.helper = FormHelper()
self.helper.form_method = 'post'
self.helper.layout = Layout(InlineRadios('categories'),)
if user:
self.user = User.objects.filter(username=user.username).first()
self.profile = Profile.objects.filter(user=user).first()
Upvotes: 1