Python Django仅为当前用户显示数据
我希望只为当前用户显示性能模型的数据。现在,页面显示所有性能数据,而不仅仅是登录用户的数据 我不确定是否我的models.py设置不正确(每个模型是否都需要一个与用户相关的foreignkey?),或者views.py文件中是否有解决方案(我使用get\u context\u data尝试了这个方法,但无法使其工作) 非常感谢您的帮助 型号.pyPython Django仅为当前用户显示数据,python,django,django-models,django-templates,django-views,Python,Django,Django Models,Django Templates,Django Views,我希望只为当前用户显示性能模型的数据。现在,页面显示所有性能数据,而不仅仅是登录用户的数据 我不确定是否我的models.py设置不正确(每个模型是否都需要一个与用户相关的foreignkey?),或者views.py文件中是否有解决方案(我使用get\u context\u data尝试了这个方法,但无法使其工作) 非常感谢您的帮助 型号.py class Adaccount(models.Model): accountname = models.CharField(max_lengt
class Adaccount(models.Model):
accountname = models.CharField(max_length=250)
def __str__(self):
return self.accountname
class Performance(models.Model):
adaccount = models.ForeignKey(Adaccount, on_delete=models.CASCADE)
date = models.DateField(auto_now_add=True)
campaign = models.CharField(max_length=500)
adset = models.CharField(max_length=500)
clicks = models.IntegerField()
impressions = models.IntegerField()
ctr = models.FloatField()
cpc = models.FloatField()
cpm = models.FloatField()
conv1 = models.IntegerField()
conv2 = models.IntegerField(blank=True, null=True)
conv3 = models.IntegerField(blank=True, null=True)
def __str__(self):
return str(self.date) + ' - ' + str(self.adaccount)
class Account(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
adaccounts = models.ForeignKey(Adaccount,null=True)
company = models.CharField(max_length=250, blank=True)
website = models.CharField(max_length=30, blank=True)
def __str__(self):
return self.company
class IndexView(LoginRequiredMixin, generic.ListView):
model = Performance
context_object_name = 'all_performance'
template_name = 'dashboard/index.html'
login_url = '/login/'
redirect_field_name = 'redirect_to'
def get_queryset(self):
return Performance.objects.all()
class HomeView(TemplateView):
model = Adaccount
template_name = 'dashboard/home.html'
视图.py
class Adaccount(models.Model):
accountname = models.CharField(max_length=250)
def __str__(self):
return self.accountname
class Performance(models.Model):
adaccount = models.ForeignKey(Adaccount, on_delete=models.CASCADE)
date = models.DateField(auto_now_add=True)
campaign = models.CharField(max_length=500)
adset = models.CharField(max_length=500)
clicks = models.IntegerField()
impressions = models.IntegerField()
ctr = models.FloatField()
cpc = models.FloatField()
cpm = models.FloatField()
conv1 = models.IntegerField()
conv2 = models.IntegerField(blank=True, null=True)
conv3 = models.IntegerField(blank=True, null=True)
def __str__(self):
return str(self.date) + ' - ' + str(self.adaccount)
class Account(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
adaccounts = models.ForeignKey(Adaccount,null=True)
company = models.CharField(max_length=250, blank=True)
website = models.CharField(max_length=30, blank=True)
def __str__(self):
return self.company
class IndexView(LoginRequiredMixin, generic.ListView):
model = Performance
context_object_name = 'all_performance'
template_name = 'dashboard/index.html'
login_url = '/login/'
redirect_field_name = 'redirect_to'
def get_queryset(self):
return Performance.objects.all()
class HomeView(TemplateView):
model = Adaccount
template_name = 'dashboard/home.html'
HTML模板
<strong>CTR | CPC | CPM</strong><br>
{% for daily in all_performance %}
<span>{{ daily.ctr }} | {{ daily.cpc }} | {{ daily.cpm }}</span><br>
{% endfor %}
CTR | CPC | CPM
{所有性能中的每日百分比%}
{{daily.ctr}}{{daily.cpc}}{{daily.cpm}}
{%endfor%}
关键问题似乎在于
def get_queryset(self):
return Performance.objects.all()
部分
您将获得视图中的所有性能对象(从objects.all()
部分代码中可以看到)
您必须以某种方式过滤用户的性能。您可以使用视图中的self.request.user
获取当前用户
问题是,看看你的模型,用户似乎在一个相关的模型上(性能->账户->账户),这使得你想要的操作有点复杂。只要这是您打算创建的模型结构,它就可以进入数据库的体系结构
假设您不会更改体系结构,那么简单的英语就是这样:
使用request.user筛选所有帐户。从这些账户中,获取所有的账户。过滤AdaAccounts中的所有性能
def get_queryset(self):
user = self.request.user
adaccount_list = Account.objects.filter(user=user)\
.values_list('adaccounts', flat=True)
return Performance.objects.filter(adaccount__in=adaccount_list)
这是一种方法,虽然不是最有效但很容易想象。其他人可能会找到更好的方法-如果有任何问题,请告诉我 关键问题似乎在于
def get_queryset(self):
return Performance.objects.all()
部分
您将获得视图中的所有性能对象(从objects.all()
部分代码中可以看到)
您必须以某种方式过滤用户的性能。您可以使用视图中的self.request.user
获取当前用户
问题是,看看你的模型,用户似乎在一个相关的模型上(性能->账户->账户),这使得你想要的操作有点复杂。只要这是您打算创建的模型结构,它就可以进入数据库的体系结构
假设您不会更改体系结构,那么简单的英语就是这样:
使用request.user筛选所有帐户。从这些账户中,获取所有的账户。过滤AdaAccounts中的所有性能
def get_queryset(self):
user = self.request.user
adaccount_list = Account.objects.filter(user=user)\
.values_list('adaccounts', flat=True)
return Performance.objects.filter(adaccount__in=adaccount_list)
这是一种方法,虽然不是最有效但很容易想象。其他人可能会找到更好的方法-如果有任何问题,请告诉我