我试图在Django的查询集中显示HTML中的一些信息。但我不知道最好的方法。
这个想法是当我打开页面时,向我显示用户名和与之相关的比赛。用户可以在Django的管理员中创建竞争。
我的网址是。
url(r'^home/(?P<company_name>\w+)', HomeView.as_view(), name='home'),
模特。
class Competition(models.Model):
name = models.CharField(max_length=200,null=False)
image = models.CharField(max_length=200, null=False)
url = models.CharField(max_length=200, null=False)
startingDate = models.DateTimeField(null=False)
deadline = models.DateTimeField(null=False)
description = models.CharField(max_length=200, null=False)
user = models.ForeignKey(User, null=False)
在views.py
中class HomeView(ListView):
model = User, Competition
template_name = 'home.html'
context_object_name = 'company'
def get_queryset(self, **kwargs):
company = self.kwargs['company_name']
try:
queryset = User.objects.filter(username__exact=company).get()
except User.DoesNotExist:
queryset = None
return queryset
当我在网址上写下这样的内容时,上面的代码会将用户返回给我:http://127.0.0.1:8000/home/diego/
HTML主页向我显示User的名称,例如:
{% if company %} <div class="jumbotron"> <div class="container">
{{company.username}} </div></div> {% endif %}
但是,我需要用HTML中的'for'来显示用户创建的比赛。
我尝试用链返回两个查询集,但我不工作。
也是这个。
queryset2 = Competition.objects.filter(user__username__exact=company).get()
get()向我显示返回更多一个对象的错误。这是逻辑,因为用户有3场与此相关的比赛。
一些小例子?或任何解决我问题的想法。
非常感谢
我试过这个,但'User'对象不可迭代(显然它只是一个)
class HomeView(ListView):
model = User
template_name = 'home.html'
context_object_name = 'company'
def get_queryset(self, **kwargs):
company = self.kwargs['company_name']
try:
queryset = User.objects.filter(username__exact=company).get()
queryset2 = Competition.objects.filter(user__username__exact=company)
result_list = list(chain(queryset, queryset2))
except User.DoesNotExist:
result_list = None
return result_list
我一直在尝试并尝试删除第一个查询集的get(),并将数据返回给HTML。
如何使用HTML访问列表中的字段,如果我打印变量'company',结果就是。
[<User: diego>, <Competition: test1>, <Competition: test2>]
但是'for'只是我获得了字符串值。我如何区分“用户”和“竞争”
{%for compa in company%}
{{compa}}
{%endfor%}
结果是: 迭戈 TEST1 TEST2
答案 0 :(得分:0)
你不必从get_queryset返回不同的查询集,它很复杂。列表视图有一个名为get_context_data的方法“ 你可以覆盖它来填充你想要的额外对象或数据。
例如只写
class HomeView(ListView):
model = User, Competition
template_name = 'home.html'
context_object_name = 'company'
def get_queryset(self, **kwargs):
company = self.kwargs['company_name']
try:
queryset = User.objects.filter(username__exact=company).get()
except User.DoesNotExist:
queryset = None
return queryset
def get_context_data(self, **kwargs):
context = super(HomeView, self).get_context_data(**kwargs)
queryset2 = Competition.objects.filter(user__username__exact=company)
context['competitions'] = queryset2
return context
在这里,您将分别获得公司和“比赛”。在模板中很好地使用它们。就试一试吧。它应该工作