Return 根据 ForeignKey 结果

Return results according to ForeignKey

几天来我的代码一直有问题。我声称对 Django 没有经验。我想根据特定的“CalendarGroups”获得结果,例如仅特定 CalendarGroups 的所有日历。要过滤日历的组的 ID 我想通过 url whit "goup_id".

传递它

在Url.py中:

urlpatterns = [
    url(r'^$', views.hello, name='hello'), #Prova
    url(r'^home/$', views.GroupCalendarView.as_view(), name='home'), #Prova
    url(r'^home/(?P<group_id>\d+)/$', views.CalendarsOfGroupView.as_view(), name='calendar_view'),
]

在models.py中:

class CalendarGroups(models.Model):
    GRP = (
       ('Amazon', 'Amazon'),
       ('VICHY', 'VICHY'),
    )

    name = models.CharField(max_length = 155, blank=True, null=True)
    
    @property
    def get_html_url(self):
        url = reverse('', args=(self.id,))
        return f'<a href="{url}"> {self.name} </a>'
   

class Calendar(models.Model):
    name = models.CharField(max_length=200)
    #created_by
    group = models.ForeignKey(CalendarGroups, on_delete = models.CASCADE, default='')
 
    @property
    def get_html_url(self):
        url = reverse('cal:calendar_view', args=(self.id,))
        return f'<a href="{url}"> {self.name} </a>'

在views.py中:

class GroupCalendarView(generic.ListView):
    model = CalendarGroups
    template_name = 'cal/home.html'

    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        #print (context)
        return context

class CalendarsOfGroupView(generic.ListView):
    
    model = Calendar
    template_name = 'cal/calendarOfGroup.html'

    def get_queryset(self, **kwargs):
        context = super().get_context_data(**kwargs)
               
        return context

这是我当前的代码,我不知道如何使用我在 views.py 中通过“group_id”传递的内容。

group_id 或任何其他 URL 参数将在 kwargs:

中可用
group_id = self.kwargs['group_id']

您可以在您的 get_queryset 方法或任何其他适用于您的 class 的方法中访问它。

class CalendarsOfGroupView(generic.ListView): 
      model = Calendar 
      template_name = 'cal/calendarOfGroup.html' 

      def get_context_data(self, **kwargs): 
          context = super().get_context_data(**kwargs) 
          group_id = self.kwargs['group_id']
          # create var to hold all objects that do not have name==group_id
          object_list = Calendar.objects.exclude(name=group_id)
          # update the context
          context.update({'object_list': object_list})          
          return context

编辑:过滤日历对象以仅包含匹配group_id

的对象
class CalendarsOfGroupView(generic.ListView): 
      model = Calendar 
      template_name = 'cal/calendarOfGroup.html' 

      def get_context_data(self, **kwargs): 
          context = super().get_context_data(**kwargs) 
          group_id = self.kwargs['group_id']
          # create var to hold all objects that do have name==group_id
          object_list = Calendar.objects.filter(name=group_id)
          # update the context
          context.update({'object_list': object_list})          
          return context