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
几天来我的代码一直有问题。我声称对 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