url.py
urlpatterns = [ url(r'^employee/(?P<emp_no>[0-9]+)/$', TitleDetail.as_view(), name='e-title'), # /employee/10001/ ]vistas.py
class TitleDetail(DetailView): model = Title pk_url_kwarg = "emp_no" def get_context_data(self, **kwargs): context = super(TitleDetail, self).get_context_data(**kwargs) context['title_list'] = Title.objects.filter(emp_no_id=self.kwargs['emp_no']) return contextmodelos.py
class Title(models.Model): emp_no = models.ForeignKey(Employee) title = models.CharField(max_length=50) from_date = models.DateField() to_date = models.DateField()datos de muestra en la base de datos:
id title from_date to_date emp_no_id ---------- --------------- ---------- ---------- ---------- 1 Senior Engineer 1986-06-26 9999-01-01 10001 2 Staff 1996-08-03 9999-01-01 10002por que me da
PÁGINA NO ENCONTRADA: No se encontró ningún título que coincida con la consulta.
De hecho, no tiene que anular el método get_object , lo que debe hacer es simplemente definir un campo de slug adecuado (no pk_url_kwarg ) como este:
class TitleDetail(DetailView): model = Title slug_field = "emp_no" slug_url_kwarg = "emp_no"Y aquí está el código fuente si desea ver qué sucedió detrás.
Puede anular el método get_object() para hacer lo que quiera:
def get_object(self, queryset=None): queryset = self.get_queryset() if queryset is None else queryset return get_object_or_404(queryset, emp_no_id=self.kwargs['emp_no']) En caso de que no lo hayas visto antes, consulta la documentación de get_object_or_404() .