查询不返回值
Query not returning values
所以我想我正在做的事情相当普遍。我正在尝试使用 Django 显示结果集。我在网上看了一段时间,这是我想出的:
models.py{
from django.db import models
from django.conf import settings
class SalesRep(models.Model):
user = models.OneToOneField(settings.AUTH_USER_MODEL)
class Sales(models.Model):
seller = models.ForeignKey(SalesRep)
sold_on = models.DateField("Sold On")
}
sales_view.py{
from salesteam.models import SalesRep, Sales
from django.views.generic import ListView
class SellerHome(List View):
model = SalesRep
template_name = 'production/sales.html'
@property
def rep_sales(self):
return Sales.objects.filter(SalesRep=self)
}
sales.html{
<div id="total-sales">
{% for sale in SellerHome.rep_sales%}
<li>{{ sale.id }}</li>
{% empty %}
<li>You don't currently have any sales</li>
{% endfor %}
</div>
}
为了完整起见,我什至尝试将 属性 写成 Sales.objects.all()
,但仍然没有成功。感谢您查看,因为我对 HTML、Django 和 Python 还很陌生。对我做错的任何帮助将不胜感激。如果您有任何问题,请告诉我:)
首先,我建议避免使用基于 class 的视图,至少在您学习 Django 时是这样,因为对于您正在做的事情而言,它们并不是真正必需的,而且不必要地复杂化。
无论如何,要使用基于 class 的视图回答您的问题,您的问题出在您的模板和视图中。您需要将 rep_sales 逻辑放在 get_queryset
中,将模型设置为 Sales,而不是 SalesRep,然后在模板中引用 object_list
。 More info.
但是,我建议您编写一个普通的、基于函数的 Django 视图。这样的事情可能会让你开始:
def view_all_sales(request):
my_sales_rep = SalesRep.objects.get(request.user)
all_my_sales = Sales.objects.filter(seller=my_sales_rep)
return render(request, "production/sales.html", {
"sales": all_my_sales
})
我不确定你遵循了什么教程,但你的代码中有很多错误......我假设你想为登录用户显示所有 Sales
?
在这种情况下,我会稍微更改模型以将 related_name
添加到 Sales
外键到 SalesRep
:
class SalesRep(models.Model):
user = models.OneToOneField(settings.AUTH_USER_MODEL)
class Sales(models.Model):
seller = models.ForeignKey(SalesRep, related_name='sales')
sold_on = models.DateField('Sold On')
文档:https://docs.djangoproject.com/en/1.7/ref/models/fields/#django.db.models.ForeignKey.related_name
我会更改 views
以使用 DetailView
:
from django.views.generic import DetailView
class SellerDetailView(DetailView):
model = SalesRep
template_name = 'production/sales.html'
context_object_name = 'seller'
def get_object(self):
return self.request.user
DetailView 上的文档 — https://docs.djangoproject.com/en/1.7/ref/class-based-views/generic-display/#detailview
<div id="total-sales">
<ul>
{% for sale in seller.sales.all %}
<li>{{ sale.id }}</li>
{% empty %}
<li>You don't currently have any sales</li>
{% endfor %}
</ul>
</div>
所以我想我正在做的事情相当普遍。我正在尝试使用 Django 显示结果集。我在网上看了一段时间,这是我想出的:
models.py{
from django.db import models
from django.conf import settings
class SalesRep(models.Model):
user = models.OneToOneField(settings.AUTH_USER_MODEL)
class Sales(models.Model):
seller = models.ForeignKey(SalesRep)
sold_on = models.DateField("Sold On")
}
sales_view.py{
from salesteam.models import SalesRep, Sales
from django.views.generic import ListView
class SellerHome(List View):
model = SalesRep
template_name = 'production/sales.html'
@property
def rep_sales(self):
return Sales.objects.filter(SalesRep=self)
}
sales.html{
<div id="total-sales">
{% for sale in SellerHome.rep_sales%}
<li>{{ sale.id }}</li>
{% empty %}
<li>You don't currently have any sales</li>
{% endfor %}
</div>
}
为了完整起见,我什至尝试将 属性 写成 Sales.objects.all()
,但仍然没有成功。感谢您查看,因为我对 HTML、Django 和 Python 还很陌生。对我做错的任何帮助将不胜感激。如果您有任何问题,请告诉我:)
首先,我建议避免使用基于 class 的视图,至少在您学习 Django 时是这样,因为对于您正在做的事情而言,它们并不是真正必需的,而且不必要地复杂化。
无论如何,要使用基于 class 的视图回答您的问题,您的问题出在您的模板和视图中。您需要将 rep_sales 逻辑放在 get_queryset
中,将模型设置为 Sales,而不是 SalesRep,然后在模板中引用 object_list
。 More info.
但是,我建议您编写一个普通的、基于函数的 Django 视图。这样的事情可能会让你开始:
def view_all_sales(request):
my_sales_rep = SalesRep.objects.get(request.user)
all_my_sales = Sales.objects.filter(seller=my_sales_rep)
return render(request, "production/sales.html", {
"sales": all_my_sales
})
我不确定你遵循了什么教程,但你的代码中有很多错误......我假设你想为登录用户显示所有 Sales
?
在这种情况下,我会稍微更改模型以将 related_name
添加到 Sales
外键到 SalesRep
:
class SalesRep(models.Model):
user = models.OneToOneField(settings.AUTH_USER_MODEL)
class Sales(models.Model):
seller = models.ForeignKey(SalesRep, related_name='sales')
sold_on = models.DateField('Sold On')
文档:https://docs.djangoproject.com/en/1.7/ref/models/fields/#django.db.models.ForeignKey.related_name
我会更改 views
以使用 DetailView
:
from django.views.generic import DetailView
class SellerDetailView(DetailView):
model = SalesRep
template_name = 'production/sales.html'
context_object_name = 'seller'
def get_object(self):
return self.request.user
DetailView 上的文档 — https://docs.djangoproject.com/en/1.7/ref/class-based-views/generic-display/#detailview
<div id="total-sales">
<ul>
{% for sale in seller.sales.all %}
<li>{{ sale.id }}</li>
{% empty %}
<li>You don't currently have any sales</li>
{% endfor %}
</ul>
</div>