python - 定义 Django 模型约束

标签 python django django-models

我想在涉及对另一个模型对象的引用的模型上添加约束。 在下面的代码中,我希望在 ProjectMember 模型上将 project_member 字段限制为不同于项目模型中的 project_creator。

class User(models.Model):
  fullname = models.CharField(max_length=200)
  email = models.EmailField(max_length=254)
  password = models.CharField(max_length=254)


class Project(models.Model):
  name = models.CharField(max_length=200)
  timestamp = models.DateTimeField("date created", auto_now=True)
  project_creator = models.ForeignKey(User, on_delete=models.CASCADE)


class ProjectMember(models.Model):
  project = models.ForeignKey(Project, on_delete=models.CASCADE)

  project_member = models.ForeignKey(
      User,
      on_delete=models.CASCADE,
      verbose_name="member of the project"
  )

  class Meta:
      order_with_respect_to = 'user_member'
      constraints = [
          models.CheckConstraint(check= , 
             name='project creator not project member'),
      ]

最佳答案

您可以像这样将它添加到 Q 对象中,

class Meta:
  order_with_respect_to = 'user_member'
  constraints = [
      models.CheckConstraint(check=~Q(project_member_id=project__project_creator_id) , 
         name='project creator not project member'),
  ]

希望这对您有所帮助!

关于python - 定义 Django 模型约束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58465619/

相关文章:

python - 在 django 中上传文件和一些数据的 RESTful 方式

python - 如何在网络服务器上上传图像。 Django

Django - 搜索相关字段

python - 为什么我的查询变成 bool 值,如何防止这种情况发生,以便我可以迭代它?

python - Pandas - 根据列值对输入值进行排名

python - sys.getrefcount() 返回远高于 2 的值

django - 在 Django 中重命名模型后修复 auth_permission 表

django - 使用自定义 QuerySet 作为管理器向所有查询集添加注释

Django 独特的 Slug(按 id)

java - 通过Python子进程读取Java system.out.print