Python 使用Django筛选器基于用户配置文件限制对数据的访问
我使用的是Django 1.11和Django Registration Redux 1.5,我对编程比较陌生 我正在创建一个应用程序,该应用程序应根据登录用户的组织显示数据 我创建了以下模型:Python 使用Django筛选器基于用户配置文件限制对数据的访问,python,django,django-models,django-views,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
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)
这是我的观点
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,其中organization字段与当前登录用户的organization字段匹配
我将非常感谢您的回答。此查询过滤器应满足您的要求
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')
查询上的此筛选器应执行您想要的操作
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')
谢谢你,但是我得到了以下错误:ValueError异常值:无法查询“dennis1”:必须是“Organization”实例。dennis1是登录用户的用户名。查询必须属于dennis1所属的组织。@mdennism我已经编辑了查询,我认为您可能需要使用PK。谢谢您,但是我收到以下错误:ValueError异常值:无法查询“dennis1”:必须是“organization”实例。dennis1是登录用户的用户名。查询必须属于dennis1所属的组织。@mdennism我已经编辑了查询,我认为您可能需要使用pk