Thursday, August 8, 2013

Re: Exception Value: Could not parse the remainder: '().order_by('-votes')' from 'poll.altword_set.all().order_by('-votes')'

I'm still a bit confused how to make my ordering work, I can't find examples that order things the way I want :(

1.)
My webpage now look like this after playing with the Viewpage.

localhost:8000/navi_polls/madara/1/

<h1>Page</h1>

<!-- Filter 5 -->
* Page - Leafy 2 = 18 votes
* Page - Leafy 3 = 50 votes

<!-- Filter 4b -->
* Paper - Leaf = 300 votes
* Page - Leafy 3 = 50 votes
* Page - Leafy 2 = 18 votes
* Paper - Leafy = 0 votes


2.)
altword_list.html

<h1>{{ poll.rosword }}</h1>

<!-- Filter 5 -->
<ul>
<!-- poll.altword_set.all.order_by('-votes') -->
{% for choice in poll.altword_set.all %}
    <li>{{ choice.rosword }} - {{ choice.alt_ros_word }} - {{ choice.alt_transl_word }} - {{ choice.articulate }} = {{ choice.votes }} votes</li>
{% endfor %}
</ul>

<!-- Filter 4b -->
<ul>
{% for choice in filter_4b %}
    <li>{{ choice.rosword }} - {{ choice.alt_ros_word }} - {{ choice.alt_transl_word }} - {{ choice.articulate }} = {{ choice.votes }} votes</li>
{% endfor %}
</ul>


3.)
How can I make Filter 5 behave like Filter 4b?


4.)
index.html

<article>
<h1>Filter 2</h1><!-- Filter 2 -->
<h3>(Word)</h3>

{% if filter_2 %}
    <ul>
    {% for row in filter_2 %}
        <li><a href="{% url 'navi_polls:altword_list' row.id %}">{{ row.rosword }}</a></li>
    {% endfor %}
    </ul>
{% else %}
    <p>No polls are available.</p>
{% endif %}
</article>


5.)
IndexView

class IndexView(generic.ListView):
    template_name = 'navi_polls/index.html'
    context_object_name = 'latest_poll_list'

    def get_queryset(self):
# Filter 1
        """
        Return the last five published polls
        (not including those set to be published in the future).
        """
        return Word.objects.filter(pub_date__lte=timezone.now()
                ).order_by('-pub_date')[:5]

        #"""
        #Return the last five published polls
        #(including those set to be published in the future).
        #"""
        #return Word.objects.order_by('-pub_date')[:5]

    def get_context_data(self, **kwargs):
        context = super(IndexView, self).get_context_data(**kwargs)
# Filter 2
        filter_2 = Word.objects.filter(direct_transl_word='')
# Filter 4
        filter_4 = Altword.objects.filter(rosword__direct_transl_word='')

        context.update({
            "filter_2": filter_2,
            "filter_4": filter_4
        })
        return context


6.)
AltwordlistView

class AltwordlistView(generic.DetailView):
    model = Word
    template_name = 'navi_polls/altword_list.html'
    context_object_name = 'poll'

    def get_queryset(self):
        #"""
        #Excludes any polls that aren't published yet.
        #"""
        #return Word.objects.filter(pub_date__lte=timezone.now())
# Filter 5
        return Word.objects.filter(direct_transl_word='')
        #return Altword.objects.filter(rosword__direct_transl_word='')


    def get_context_data(self, **kwargs):
        context = super(AltwordlistView, self).get_context_data(**kwargs)
# Filter 4b
        filter_4b = Altword.objects.filter(rosword__direct_transl_word='').order_by('-votes')

        context.update({
            "filter_4b": filter_4b
        })
        return context


7.)
Models

class Word(models.Model):
    rosword = models.CharField(max_length=200)
    direct_transl_word = models.CharField(max_length=120, blank=True, null=True)
    pub_date = models.DateTimeField('date published')

    def __unicode__(self):
        return self.rosword

    def was_published_recently(self):
        now = timezone.now()
        return now - datetime.timedelta(days=1) <= self.pub_date < now
        # Enables future date selection.
        #return self.pub_date >= timezone.now() - datetime.timedelta(days=1)
    was_published_recently.admin_order_field = 'pub_date'
    was_published_recently.boolean = True
    was_published_recently.short_description = 'Published recently?'
#_______________________________________________________________________________

class Altword(models.Model):
    rosword = models.ForeignKey(Word)
    alt_ros_word = models.CharField(max_length=200)
    alt_transl_word = models.CharField(max_length=200)
    articulate = models.CharField(max_length=200)
    votes = models.IntegerField(default=0)
    pub_date = models.DateTimeField('date published')

    def __unicode__(self):
        return self.alt_ros_word
#_______________________________________________________________________________







On Wednesday, August 7, 2013 11:59:38 PM UTC+2, Pepsodent Cola wrote:
Hi,
I have some database query ordering problems.

1.)
On my webpage I see this output:

* Option-1 = 18 votes
* Option-2 = 50 votes


2.)
altword_list.html

<ul>
{% for choice2 in poll.altword_set.all %}
<!-- for choice2 in poll.altword_set.all().order_by('-votes') -->
    <li>{{ choice2.rosword }} - {{ choice2.alt_ros_word }} - {{ choice2.alt_transl_word }} - {{ choice2.articulate }} = {{ choice2.votes }} votes</li>
{% endfor %}
</ul>


3.)
I want my webpage to order the output by most votes down to least votes like so:

* Option-2 = 50 votes
* Option-1 = 18 votes


4.)
In Python shell I managed to accomplish that by doing like so:

>>> p = Word.objects.get(pk=1)
>>> p
<Word: Page>
>>> p.altword_set.all()
[<Altword: Leafy 2>, <Altword: Leafy 3>]

>>> p.altword_set.all().order_by('votes')
[<Altword: Leafy 2>, <Altword: Leafy 3>]


5.)
How come when I replace this:
    {% for choice2 in poll.altword_set.all %}
to this:
    {% for choice2 in poll.altword_set.all().order_by('-votes')  %}
then I get this error:

Exception Type: TemplateSyntaxError
Exception Value: 
Could not parse the remainder: '().order_by('-votes')' from 'poll.altword_set.all().order_by('-votes')'


How do I write the correct syntax for ordering my list?

--
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 http://groups.google.com/group/django-users.
For more options, visit https://groups.google.com/groups/opt_out.
 
 

0 Comments:

Post a Comment

Subscribe to Post Comments [Atom]

<< Home


Real Estate