Python Django仅为当前用户显示数据

Python 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

我希望只为当前用户显示性能模型的数据。现在,页面显示所有性能数据,而不仅仅是登录用户的数据

我不确定是否我的models.py设置不正确(每个模型是否都需要一个与用户相关的foreignkey?),或者views.py文件中是否有解决方案(我使用get\u context\u data尝试了这个方法,但无法使其工作)

非常感谢您的帮助

型号.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'
视图.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)
这是一种方法,虽然不是最有效但很容易想象。其他人可能会找到更好的方法-如果有任何问题,请告诉我