在我的Django项目中,我有一个从Django外部填充的数据库,但需要Django功能以用户友好的方式在数据库中显示数据。遗留数据库结构如下:
class SomeModel(models.Model):
#some fields
group_access = models.ForeignKey(AccessGroup,on_delete=models.CASCADE()
class AccessGroup(models.Model):
group_name = models.CharField(max_length=200)
用户拥有一个自定义用户个人资料,其中包含分配给特定用户的群组名称的多种关系:
class CustomUser(models.Model):
#some values
projects = models.ManyToManyField(AccessGroup)
目前我能够显示用户有权访问的所有组的数据,但我正在寻找的是一种创建下拉菜单的方法,以便用户可以在组之间切换而无需注销或重新输入组在每个观点上。
答案 0 :(得分:0)
您可以尝试这样的事情:
AccessGroup.objects.filter(CustomUser__pk=1)
或者
CustomUser.objects.filter(AccessGroup__group_name='GropName')
https://docs.djangoproject.com/en/2.0/topics/db/examples/many_to_many/
答案 1 :(得分:0)
你可以扩展django用户模型,比如
from django.contrib.auth.models import User
class CustomUser(models.Model):
projects = models.ManyToManyField(AccessGroup)
class UserProfile(models.Model):
user = models.OneToOneField(User, unique=True)
custom_user = models.ForeignKey(CustomUser, unique=False)
class SomeModel(models.Model):
#some fields
group_access = models.ForeignKey(AccessGroup,on_delete=models.CASCADE()
class AccessGroup(models.Model):
group_name = models.CharField(max_length=200)
然后这样就可以在你的视图中获取数据
def index(request):
AccessGroup.objects.filter(user__id=persion(request.user).id)
答案 2 :(得分:0)
我假设您知道如何获取组列表,并且只是想知道如何将此列表转换为模板。如果没有,请告诉我,我也会解释一下。
如果您正在尝试将全局变量转换为模板,那么实际上有3个主要选项:
答案 3 :(得分:0)
谢谢大家让我走上正轨。我最终做的是编写一个上下文处理器来检查用户权限:
#context_processors.py
def check_groups(request):
group_check = AccessGroup.objects.values('id','group_name').filter(projects=request.user.id)
return {
'group_check': group_check,
}
之后我在base.html中创建了一个Bootstrap-select下拉列表
<select class="selecpicker">
<optgroup>
<option data-hidden="true">Choose group</option>
{% for grpup in group_check %}
<option val="group.id">{{ group.group_name }}</option>
{% endfor %}
</optgroup>
这只是用户使用它作为在视图中切换访问组并通过ajax将值传递给我遇到的任何其他模板视图的手段的问题。 不是100%我想要的,但它的工作原理和用户都很满意。