django订购用户登录的字段

时间:2016-04-19 11:24:37

标签: django django-templates

我是Django的新手,我正在尝试通过用户登录来改变我的一个观点。例如,如果'test@example.com'已登录,那么Tview应该提供相关的数据到第一行的Test@example.com。目前它没有特定的顺序。

Current order: for a user signed as  test@example.com
    GEL_TEACT trea@example.com
    TREAT_ACT test@example.com

    I want to order this as:

    Product OWNER
    TREAT_ACT test@example.com
    GEL_TEACT trea@example.com

我的观点:

class PListView(ListView):
    model = Product

    template_name = "app/product_list.html"

project_list_view = PListView.as_view()

我的模板:

<tbody>
                {% for product in object_list %}
                <tr>
                    <td><a href="{% url "product-detail" pro_id=project.pk %}">{{ product.title }}</a></td>
                    <td>
                        <a href="{% url "product-update" project_id=project.pk %}">
                            <i class="fi-pencil"></i>
                        </a>
                    </td>
                </tr>
                {% endfor %}

            </tbody>

感谢您的时间。

1 个答案:

答案 0 :(得分:0)

这些是三种不同的选择,具体取决于您的需求。只需使用其中一个。

在您的示例中,应首先显示已登录的用户。这只是放在列表前面的一个项目。所以最容易在模板中做到这一点

<ul>
<li>{{ user.username }}</a></li>
{% for item in users %}
  {% if item != user %}
    <li>{{ item.username }}</a></li>
  {% endif %}
{% endfor %}
</ul>

但是,如果您想按特定顺序获取列表,有两种方法可以实现。如果订单仅适用于此ListView,请使用the get_queryset() method of ListView()

class PListView(ListView):
    model = Product
    template_name = "app/product_list.html"

    get_queryset(self):
        return Product.objects.all().order_by('name')

但是,如果数据始终以这种方式订购,则在产品型号的所有列表中,您可以order it right on the model而不是

class Product(models.Model):
    name = models.CharField(max_length=50)

    class Meta:
        ordering = ['name', ]