使用Django过滤器限制基于用户配置文件的数据访问

时间:2017-05-13 09:26:01

标签: python django django-models django-views

我正在使用Django 1.11和Django Registration Redux 1.5,而且我对编程相对较新。

我正在创建一个应该根据登录用户的组织显示数据的应用程序。

我创建了以下模型:

class Organization(models.Model):
organization_name=models.CharField(max_length=200)
organization_type=models.CharField(max_length=50)
organization_code=models.IntegerField()
organization_krapin=models.CharField(max_length=11)
organization_contactname=models.CharField(max_length=200)
organization_contactnumber=models.IntegerField()
tariff=models.ForeignKey("Tariff", on_delete=models.SET_NULL,
    blank=True,
    null=True,
    )

def __unicode__(self):
    return str(self.organization_name)

class OrganizationUserProfile(models.Model):
user=models.OneToOneField(User, unique=True)
organization=models.ForeignKey("Organization")

def __unicode__(self):
    return str(self.user)   

class OrganizationOrders(models.Model):
REBATE_OPTIONS = (
    ('Y', 'Yes'),
    ('N', 'No'),
    )
mobile_number=models.IntegerField()
order_status=models.BooleanField(default=False)
scored_data_id=models.CharField(max_length=200, null=True)
order_datetime=models.DateField(default=timezone.now)
order_udatetime=models.DateField(null=True, blank=True)
order_rebate_status=models.CharField(max_length=1, choices=REBATE_OPTIONS, default='N')
organization=models.ForeignKey("Organization")

def __unicode__(self):
    return str(self.mobile_number)

这是我的views.py

from __future__ import unicode_literals
from django.shortcuts import render
from .models import OrganizationOrders001, OrganizationUserProfile

def orders(request):
if request.user.is_authenticated:

    context = {
        'organization_orders': OrganizationOrders.objects.all(),
    }
    return render(request, 'orders.html', context)
else:
    return render(request, 'base.html')

我想根据在OrganizationUserProfile中注册的用户个人资料的组织来过滤OrganizationOrders。

然后,我将只显示OrganizationOrders,其中组织字段与当前登录用户的组织字段匹配。

我将非常感谢您的回答。

1 个答案:

答案 0 :(得分:3)

查询的这个过滤器应该做你想要的

from __future__ import unicode_literals
from django.shortcuts import render
from .models import OrganizationOrders, OrganizationUserProfile

def orders(request):
    if request.user.is_authenticated:
        context = {
            'organization_orders': OrganizationOrders.objects.filter(organization__organizationuserprofile__user=request.user.pk),
        }
        return render(request, 'orders.html', context)
    return render(request, 'base.html')