I have proxy models for related types. The problem is ListView and DetailView connection.
Courses has all types of course, each course must have related type’s URL.
Here is full structure of my sample code, ( models, views, urls, template)
#models.py
COURSE_TYPES = (
('a', 'Appetizer'),
('s', 'Soup and Salad'),
('m', 'Main Course'),
('d', 'Dessert')
)
class Course(models.Model):
type = models.CharField(max_length=1, choices=COURSE_TYPES)
name = models.CharField(max_length=100)
slug = models.SlugField(blank=True, unique=True)
thumbnail = models.ImageField(null=True, blank=True)
description = models.TextField(max_length=1000)
def get_absolute_url(self):
return reverse('course', kwargs={'slug':self.slug})
class AppetizerManager(models.Manager):
def get_queryset(self):
return super(AppetizerManager, self).get_queryset().filter(
type='a')
class MainManager(models.Manager):
def get_queryset(self):
return super(MainManager, self).get_queryset().filter(
type='m')
class Appetizer(Course):
objects = AppetizerManager()
class Meta:
proxy = True
class Main(Course):
objects = MainManager()
class Meta:
proxy = True
#views.py
class CourseListView(ListView):
model = Course
template_name = 'courses.html'
class AppetizerDetailView(DetailView):
model = Appetizer
template_name = 'appetizer_detail.html'
class MainDetailView(DetailView):
model = Main
template_name = 'main_detail.html'
#urls.py
urlpatterns = [
path('courses/', views.CourseListView.as_view(), name='courses'),
path('appetizer/<slug:slug>/', views.AppetizerDetailView.as_view(), name='appetizer'),
path('main/<slug:slug>/', views.MainDetailView.as_view(), name='main'),
]
#courses.html
<h1>Courses</h1>
{% for course in object_list %}
<ul>
<li><a href="{{ course.get_absolute_url }}">{{ course.name }}</a></li>
</ul>
{% endfor %}
How can I edit my code for this purpose properly?
Thanks.