django - 允许将 django 模型字段修改为某些用户
问题描述
我正在 DRF 上构建一个市场 REST Api,其中有创作者和品牌。创作者可以发布他们的项目,品牌可以提供报价。我有一个 AbstractUser 类和
class User(AbstractBaseUser, PermissionsMixin):
email = models.EmailField(max_length=32, unique=True)
first_name = models.CharField(max_length=32, blank=True)
last_name = models.CharField(max_length=64, blank=True)
is_staff = models.BooleanField(default=False)
is_superuser = models.BooleanField(default=False)
is_active = models.BooleanField(default=True)
date_joined = models.DateTimeField(auto_now_add=True)
location = models.CharField(max_length=120, blank=True)
bio = models.TextField(blank=True)
is_creator = models.BooleanField(default=False)
is_brand = models.BooleanField(default=False)
USERNAME_FIELD = 'email'
EMAIL_FIELD = 'email'
REQUIRED_FIELDS = []
objects = CustomUserManager()
class Creator(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
class Brand(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
name = models.CharField(max_length=64)
与项目相关的模型如下所示:
class Project(models.Model):
title = models.CharField(max_length=128, )
description = models.TextField()
created_on = models.DateTimeField(auto_now_add=True)
category = models.CharField(max_length=2, choices=CATEGORY_CHOICES)
author = models.ForeignKey(Creator, on_delete=models.CASCADE)
class ProjectOffer(models.Model):
PENDING, NEGOTIATIONS, APPROVED, DECLINED = range(4)
STATUS = (
(PENDING, 'Pending'),
(NEGOTIATIONS, 'Negotiations'),
(APPROVED, 'Approved'),
(DECLINED, 'Declined'),
)
title = models.CharField(max_length=128)
description = models.TextField()
author = models.ForeignKey(Brand, related_name='project_offers',
on_delete=models.CASCADE)
project = models.ForeignKey(Project, related_name='project_offers',
on_delete=models.CASCADE)
created_on = models.DateTimeField(auto_now_add=True)
updated_on = models.DateTimeField(auto_now=True)
status = models.PositiveSmallIntegerField(choices=STATUS,
default=PENDING)
问题如下。项目报价由品牌方提供。它链接到一个项目。品牌应该有机会更新它的报价,比如标题或描述。但他们无法更新状态,因为它是由创建者更新的。反之亦然,创建者无法更新标题和描述字段。
我怎样才能实现这个逻辑?对于我的 ProjectOffer 视图,我使用 DRF 中的 ModelViewSet
我知道可能有两种方法:
- 通过权限(但真的不知道如何实现)
- 通过序列化程序。
有什么建议么?
解决方案
推荐阅读
- c# - ASP.NET Core 5 - CreatedAtAction 在返回复杂对象时不返回任何数据
- reactjs - 在元素可见之前反应 useInView 触发器
- javascript - 来自json的Anychart范围列
- powershell - 远程签署 PowerShell 和 .DLL
- azure-devops - 如何使用相同的继承流程模板 Azure Devops 将相同的规则从一个工作项导入另一个
- html - 溢出并填充父框架
- c - 如何在 do-while 循环中正确设置条件 (C)
- airflow - 如何在没有运行气流服务器的情况下执行 dag?
- snowflake-cloud-data-platform - 如果您不记得确切的时间/日期,请从 Snowflake 中恢复已删除的记录
- amazon-ec2 - 尝试仅在 1 个 YAML 文件中使用 Ansible 创建具有不同资源(主要是实例类型和 AMI)的多个 AWS 实例