类别可点击的按钮Django

时间:2018-04-16 19:27:32

标签: django django-models django-forms django-templates django-views

我有一个视图来呈现所有唯一类别的列表。我希望他们成为链接。打开一个新视图,显示属于该类别的所有项目。我不知道如何在urlpatterns上创建这些链接。 关于什么是最好的行动方案,我也有一些问题。我尝试过的第一件事就是让我的模型已经包含了类别字段并过滤了ListView类中的唯一字段。我尝试的第二件事是创建一个包含所有类别的新模型。

my models.py

class Items(models.Model):
    nombre = models.CharField(max_length=250)
    descripcion = models.CharField(max_length=250)
    codigo_proveedor = models.CharField(max_length=250)
    # categoria = models.CharField(max_length=250)
    categoria = models.ForeignKey('Categorias', on_delete=models.CASCADE) 
    c_minima = models.IntegerField()
    c_actual = models.IntegerField()
    proveedor = models.ForeignKey('Proveedores', on_delete=models.CASCADE)
    active = models.BooleanField()

    def __str__(self):
        return self.nombre + '   -----   ' + str(self.categoria) + '   -----    ' + str(self.c_actual)

class Categorias(models.Model):
    categoria = models.CharField(max_length=250, unique=True)
    # slug = models.SlugField(max_length=250, unique=True)
    active =  models.BooleanField()

    #
    # def get_absolute_or_url(self):
    #   return '',(self.slug, )

    def __str__(self):
        return self.categoria


class Proveedores(models.Model):
    nombre = models.CharField(max_length=250)
    telefono = models.CharField(max_length=250)
    direccion1 = models.CharField(max_length=250)
    direccion2 = models.CharField(max_length=250, null=True)
    active =  models.BooleanField()

    def __str__(self):
       return self.nombre

my views.py

# CREA LOS BOTONES DE CLASIFICACIONES
# class ItemListView(ListView):
#     model= Items
#
#     def get_context_data(self,**kwargs):
#         context = super(ItemListView, self).get_context_data(**kwargs)
#         context['categoria'] = Items.objects.all().order_by('categoria').values('categoria').distinct()
#         return context


class ItemListView(ListView):
    model = Categorias

    def get_context_data(self, **kwargs):
        context = super(ItemListView, self).get_context_data(**kwargs)
        context['categoria'] = Categorias.objects.all().order_by('categoria')
        return context

感谢您的帮助

1 个答案:

答案 0 :(得分:1)

categorias_list.html创建链接

   {% for obj in object_list %}
      <a href="{% url 'cat' obj.id %}">{{ obj.categoria }}</a>
   {% endfor %}

urls.py中创建您的网址

 url(r'^categoria/(?P<pk>[0..9]+)/$', views.CategoriaDetail.as_view(), name='cat')

views.py中创建分类的详细信息视图

class CategoriaDetail(DetailView):
    model = Categorias

categorias_detail.html中显示项目

{% for item in obj.iterms_set.all %}
   {{ item.descripcion }}
{% endfor %}