On Wednesday, July 5, 2017 at 3:59:41 PM UTC+3, bob gailer wrote:
On Jul 5, 2017 6:55 AM, "elloy" <eleni...@gmail.com> wrote:
>
> I need your help with a problem I'm trying to solve
> I'm making a questionnaire and I have to count the selected choices that the user have checked in a certain question with 5 possible answers(choices)
> The model I'm using is:
>
> class Reuse(models.Model):
> REUSE_OPTIONS = (
> ('1', 'first choice'),
> ('2', 'second choice'),
> ('3', 'third choice'),
> ('4', 'fourth choice'),
> ('5', 'none of the above'),
> )
>
> user = models.ForeignKey(settings.AUTH_USER_MODEL, null=True, blank=True)
> reuse = MultiSelectField(max_length=250, choices= REUSE_OPTIONS, max_choices=4, null=True)
> m = models.DecimalField(max_digits=5, decimal_places=3, default=0)
> numchoices = models.IntegerField()
I am not an expert in Django, but I will point out some problems. You just made an assignment to numchoices, then you redefine numchoices in the next line.
> def numchoices(self):(I tried this but it didn't work)
Telling us it didn't work is not helpful. You need to be much more explicit. What led you to say this didn't work?
> self.choices_count = self.choice_set.count()
What are choices_count any choice_set?
> self.save()
>
> I wrote this view:
> def reuse (request):
> if request.method == "POST":
> form = ReuseForm(request.POST)
> if form.is_valid():
> reuse = form.save(commit=False)
> # if reuse.get_choices.count() == 1 : reuse.m=0.075 (this doesn't work either)
> # elif reuse.get_choices.count() == 2 : reuse.m=0.15
> # elif reuse.get_choices.count() == 3 : reuse.m=0.225
> # elif reuse.get_choices.count() == 4 : reuse.m=0.3
Rather than calling the method so many times it's better to call it once and assign the result to a variable. Also in this case you can compute m from the count
> reuse.save()
> return redirect('../22')
> else:
> form = ReuseForm()
> return render(request, 'questionnaire/reuse.html', {'form':form})
>
> And the form I'm using is:
>
> class ReuseForm(forms.ModelForm):
>
> class Meta:
> model = Reuse
> fields = ('reuse',)
>
> Please, have you got any suggestions;
By the way I don't know what the effect is of defining a function in a model. Someone else will have to deal with that. I suggest you fix problems I've pointed out run the program tell us exactly what goes wrong and where
>
models.py:
class Reuse(models.Model):
REUSE_OPTIONS = (
('1', 'first choice'),
('2', 'second choice'),
('3', 'third choice'),
('4', 'fourth choice'),
('5', 'none of the above'),
)
user = models.ForeignKey(settings.
AUTH_USER_MODEL, null=True, blank=True)
reuse = MultiSelectField(max_length=
m = models.DecimalField(max_
views.py:
def reuse (request):
if request.method == "POST":
form = ReuseForm(request.POST)
if form.is_valid():
reuse = form.save(commit=False)
q = reuse.get_choices.count()
if q == 1 : reuse.m=0.075
elif q == 2 : reuse.m=0.15
elif q == 3 : reuse.m=0.225
elif q == 4 : reuse.m=0.3
reuse.save()
return redirect('../22')
else:
form = ReuseForm()
return render(request, '../reuse.html', {'form':form})
The error I get is the following:
Exception Type: AttributeError Exception Value: 'Reuse' object has no attribute 'get_choices'
I' m trying to find an attribute of the multiselectfield or a filter that will return the number of the selected checkboxes, every time a user answer the question.
Thank you very much for your support
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 django-users+unsubscribe@googlegroups.com.
To post to this group, send email to django-users@googlegroups.com.
Visit this group at https://groups.google.com/group/django-users.
To view this discussion on the web visit https://groups.google.com/d/msgid/django-users/45f343ee-5d2a-4f1b-8bbf-582d60df0911%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.
No comments:
Post a Comment