django - 使用 Django 将信息从另一个模型附加到模型
问题描述
在我的 Django 聊天应用程序中,用户拥有对公司的访问权限以及对该公司某些聊天室的访问权限。他们需要公司访问权限才能被授予访问聊天室的权限。
当用户连接到房间时,我想在列中显示所有具有相关公司的公司访问权限的用户,以及每个有权访问聊天室的用户(复选框),以便用户可以轻松通过单击复选框从聊天室中添加或删除。
为了显示这个用户列表,我可以手动构建一个具有所有公司访问权限的 Python 对象,并为每个对象添加一个字段,指示该人是否也可以访问房间。没有一种纯粹的 Django 方法可以做到这一点吗?
这是我的模型:
class CompanyAccessRight(models.Model):
user = models.ForeignKey('auth.User', on_delete=models.CASCADE, related_name="accessrights")
company = models.ForeignKey(Company, on_delete=models.CASCADE, related_name="authorizedpeople")
class Room(models.Model):
acessrights = models.ManyToManyField(CompanyAccessRight, through='RoomAccessRight')
class RoomAccessRight(models.Model):
room = models.ForeignKey(Room, on_delete=models.CASCADE, related_name='accessrightsforroom')
accessrights = models.ForeignKey(CompanyAccessRight, on_delete=models.CASCADE, related_name='roomaccessrightsforcompany')
这是我手动创建对象的视图(它有效):
companyaccessrights = CompanyAccessRight.objects.filter(company=company)
roomaccessrights = RoomAccessRight.objects.filter(room=room)
for companyaccessright in companyaccessrights:
companyaccessright.hasaccess = False
for roomaccessright in roomaccessrights:
if roomaccessright in companyaccessright.roomaccessrightsforcompany.all():
companyaccessright.hasaccess = True
解决方案
推荐阅读
- java - struts.config 到 struts2 的转换
- docker - 无法为 pod“metadata-api-local”挂载卷:等待卷附加或挂载 pod“metadata”/“metadata-api-local”的超时过期
- azure-logic-apps - 由于协议中的 Schema 配置,文件通过 X12 失败
- javascript - Rails/JavaScript onclick 通过辅助方法发送值,Ajax 请求
- javascript - 获取 API 被阻止,但不是 AJAX 或 XHR
- sql - 在 R 中使用 SQL 'UPDATE'、'SET'、'AND'
- xamarin.forms - 如何在 Xamarin 表单中创建边缘褪色的滚动视图?(Xamarin.ios)
- android - “不保留活动”和配置更改有什么区别?
- crop - 在 PCL 中裁剪多边形网格
- java - 使用休眠 5 进行 jibx 编组