I believe what you're looking for is an initial value. In __init__ the 
following would achieve this:

self.fields['exercise_field'].initial = self.getRandomText(self.language, 
self.dictionary)



On Friday, September 5, 2014 8:17:33 AM UTC-7, Yarick Antonov wrote:
>
> I have serious OOP design problem, and i don't know the way to solve it.
>
> *Here are two of my views:*
> def exercise(request):
>     if request.method == 'GET':
>         request.session["exercise_start"] = time()
>         form = ExerciseForm(language = request.session["language"], 
> dictionary = request.session["dictionary"])
>
>     elif request.method == 'POST':
>         form = ExerciseForm(request.POST, language = request.session[
> "language"], dictionary = request.session["dictionary"])
>
>         if form.is_valid():
>             ExerciseTime = time() - request.session["exercise_start"]
>             ExerciseText = form.cleaned_data["exercise_field"]
>
>             if request.user.is_authenticated():
>                 exercise = Exercise(player = request.user)
>                 exercise.time = ExerciseTime
>                 exercise.save()
>
>             request.session["exercise_text"] = ExerciseText
>             request.session["exercise_time"] = ExerciseTime
>             return redirect('game_result')
>     return render(request, "game/exercise.html", {'form': form})
>
> def result(request):
>     exercise_result = {"exercise_text": request.session["exercise_text"], 
> "exercise_time": request.session["exercise_time"]}
>     return render(request, "game/result.html", exercise_result)
>
> *And here is my "exercise form" which obviously used by "exercise view":*
> class ExerciseForm(forms.Form):
>     def __init__(self, *args, **kwargs):
>         self.language = kwargs.pop('language', None)
>         self.dictionary = kwargs.pop('dictionary', None)
>         self.exercise_text = self.getRandomText(lng=self.language, dct=
> self.dictionary)
>         self.SetExText()
>         super(ExerciseForm, self).__init__(*args, **kwargs)
>
>     def SetExText(self):
>         self.exercise_text = self.getRandomText(self.language, self.
> dictionary)
>         self.exercise_field.exercise_text = self.exercise_text
>
>     def getRandomText(self, lng, dct):
>         count = ExerciseText.objects.filter(dictionary__dictionary_name = 
> dct).count()
>         if count:
>             rand_id = sample(range(1, count), 1)
>             return ExerciseText.objects.get(id__in=rand_id).text
>         else:
>             return "lol"
>
>     exercise_field = ExerciseField(exercise_text = exercise_text, widget = 
> forms.TextInput(attrs = {'autocomplete': 'off', 'autofocus': 'autofocus'
> }))
>
> *My field, used in form above:*
> class ExerciseField(forms.CharField):
>     def __init__(self, exercise_text, *args, **kwargs):
>         self.exercise_text = exercise_text
>         super(ExerciseField, self).__init__(*args, **kwargs)
>
>     def validate(self, value):
>         if value != self.exercise_text:
>             raise ValidationError("Texts don't match")
>
> *And finally, simple template:*
> {% extends "base.html" %}
>
> {% block content %}
> <form action="game_result" method="post">
>     {% csrf_token %}
>     {{ form.exercise_text }}<br/>
>     {{ form.as_p }}
> </form>
> {% endblock content %}
>
> What i try to do:
> I try to bargain two arguments which come from "create view" which not 
> represent here in sake of space saving, and these two arguments are 
> "language", and "dictionary".
> I use them to get a record from db table, to get random text.
>
> And here I need your help, because i can't dynamically create variable 
> "exercise_text", because i need it in Class instance.
> Meaning - it need to be predefined before I'll use my "exercise_field.
>
> And also i can't put exercise_field inside of "__init__", because it will 
> not be accessible in template.
>
> *In short:*
> I need to get random record from db, and i need to put this record in my 
> field. How to do that? Dynamically.
>

-- 
You received this message because you are subscribed to the Google Groups 
"Django users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/django-users.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/django-users/ed45bdcc-c82d-42c7-9fb8-203d6d187148%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to