Ich möchte ListView verwenden, um Listen von Abschlüssen nach Schule und Staat zu erstellen. Zum Beispiel würde ich das Feld "degree_awarded" im Programmmodell verwenden, um eine Liste von "Schulen in Pennsylvania, wo Sie einen Bachelor-Abschluss erhalten können" zu erstellen.Erstellen Sie Listen in ListView von Modellfeld in Django
Modelle
class State(models.Model):
state_name = models.CharField(max_length=20, default='')
state_slug = models.SlugField()
def __str__(self):
return self.state_slug
class City(models.Model):
city_name = models.CharField(max_length=55, default='')
city_slug = models.SlugField()
state = models.ForeignKey(State, null=True)
def __str__(self):
return self.city_slug
class School(models.Model):
school_name = models.CharField(max_length=55, default='')
school_slug = models.SlugField()
city = models.ForeignKey(City, null=True)
def __str__(self):
return self.school_slug
def sorted_programs(self):
return self.program_set.all().order_by('program_name')
class Program(models.Model):
program_name = models.CharField(max_length=100, default='')
program_slug = models.SlugField(max_length=100, default='')
school = models.ForeignKey(School, null=True)
degree_awarded = models.CharField(max_length=10, default='')
def __str__(self):
return self.program_slug
Ansichten
class SchoolIndexView(ListView):
model = State
def get_context_data(self, **kwargs):
context = super(SchoolIndexView, self).get_context_data(**kwargs)
context['state_list'] = State.objects.all().order_by('state_name')
return context
class ProgramInSchoolView(DetailView):
model = School
template = 'school_detail.html'
def get_object(self):
school_slug = School.objects.get(
school_slug=self.kwargs.get('school_slug')
)
return school_slug
def get_context_data(self, **kwargs):
context = super(ProgramInSchoolView, self).get_context_data(**kwargs)
context['school'] = self.object
context['program_list'] = self.object.program_set.all().order_by('program_name')
return context
class ProgramView(DetailView):
model = Program
template = 'program_detail.html'
def get_object(self):
program_slug = Program.objects.get(
program_slug=self.kwargs.get('program_slug')
)
return program_slug
def get_context_data(self, **kwargs):
context = super(ProgramView, self).get_context_data(**kwargs)
context['program'] = self.object
context['program_classes'] = self.object.classes_set.all().order_by('class_number')
return context
class DegreeView(ListView):
model = Program
template = 'degree_list.html'
def get_context_data(self, **kwargs):
context = super(DegreeView, self).get_context_data(**kwargs)
context['state_for_degree'] = State.objects.get(state_slug=self.kwargs.get('state_slug'))
context['city_for_degree'] = City.objects.get(city_name=self.kwargs.get('city_name'))
context['school_for_degree'] = School.objects.get(school_slug=self.kwargs.get('school_slug'))
context['degree_by_state'] = Program.objects.get(degree_awarded=self.kwargs.get('degree_awarded')).filter(school_slug=school_slug).filter(city_slug=city_slug).filter(state_slug=state_slug).order_by('city_name')
return context
Urls
url(r'^(?P<state_slug>[\w-]+)/$', CityInStateView.as_view(), name='state_detail'),
url(r'^(?P<state_slug>[\w-]+)/(?P<school_slug>[\w-]+)/$', ProgramInSchoolView.as_view(), name='school_detail'),
url(r'^(?P<state_slug>[\w-]+)/(?P<school_slug>[\w-]+)/(?P<program_slug>[\w-]+)/$', ProgramView.as_view(), name='program_detail'),
url(r'^(?P<state_slug<[\w-]+)/(?P<program_slug>[\w-]+)/$', DegreeView.as_view(), name='degree_list'),
Ich kann nicht herausfinden, wie die Ansicht und URL-Routing zu schreiben, so dass ich die Informationen verwenden, kann ich bereits im Feld degree_awarded des Programmmodells, um eine Liste zu generieren.
Kann mir bitte jemand in die richtige Richtung zeigen?
Vielen Dank.
Bearbeiten: Ich habe die relevanten Modelle hinzugefügt, die ich vorher weggelassen habe. Ich wollte knapp sein. Ich habe auch den letzten Filter hinzugefügt, den ich ausprobiert habe. Es erzeugt immer noch nicht die Grad-Listen sortiert nach Zustand.
Zuerst müssen Sie die richtige queryset zu bekommen. Welcher Teil von "Schulen in Pennsylvania, in denen Sie einen Bachelor-Abschluss erhalten können." findest du schwierig? Weißt du, wie man Schulen mit Staatsschnecke "PA" bekommt? Wissen Sie, wie Sie Schulen mit Bachelor-Studiengängen bekommen? Beachten Sie, dass Sie das 'City'-Modell verpasst haben (ich denke, es hat einen Fremdschlüssel für' State'). – Alasdair
Das Stadtmodell ist nicht relevant. Ich habe es bearbeitet. Ich weiß, wie man all die Dinge macht, die du gefragt hast. Ich habe jedoch Probleme mit QuerySets. Ich weiß nicht wirklich, um alles für das gewünschte Ergebnis zusammenzusetzen. – user2901792
Ich denke, das Stadtmodell ist relevant, wie sonst wirst du eine Liste von Schulen in Pennsylvania bekommen? Wenn Sie wissen, wie Sie diese Abfragen schreiben, fügen Sie sie Ihrer Frage hinzu, und Sie sind auf halbem Weg. – Alasdair