python - 没有唯一参数的唯一值错误

标签 python django error-handling django-admin

我正在尝试使用每个Accounts唯一的用户名创建Server

class Server(models.Model):

    name = models.CharField(primary_key=True, max_length=50, unique=True)

class Account(models.Model):
    server = models.ForeignKey(Server,on_delete=models.CASCADE)
    username = models.CharField(max_length=100)
    account_name = models.CharField(max_length=100)
    password = models.CharField(max_length=50)

现在我正在
duplicate key value violates unique constraint "zuya_aaccount_username_5f0a17d4_uniq"
当我创建一个非唯一的account_name时,它没有显示任何问题

最佳答案

您可以指定 UniqueConstraint [Django-doc]来指定两个(或更多字段)在一起应该是唯一的:

class Account(models.Model):
    server = models.ForeignKey(Server,on_delete=models.CASCADE)
    username = models.CharField(max_length=100)
    account_name = models.CharField(max_length=100)
    password = models.CharField(max_length=50)

    class Meta:
        constraints = [
            models.UniqueConstraint(
                fields=['server', 'account_name'],
                name='unique_username_per_server'
            )
        ]

因此,这意味着对于同一服务器,不能存在两个具有相同Accountaccount_name,反之亦然。

之前,您可以使用 unique_together [Django-doc]元选项:
class Account(models.Model):
    server = models.ForeignKey(Server,on_delete=models.CASCADE)
    username = models.CharField(max_length=100)
    account_name = models.CharField(max_length=100)
    password = models.CharField(max_length=50)

    class Meta:
        unique_together = [['server', 'account_name']]

关于python - 没有唯一参数的唯一值错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61710157/

相关文章:

python:ctypes,argtypes 会自动调用构造函数吗?

python - 从模板访问 Django CreateView 中的模型名称

powershell - try/catch 好像没有效果

python - 在 numpy 中查找最大值的索引排除零值

python - 在python中组合两个字符串

python - 如何根据水平线拆分图像?

django - 创建一个内联管理,显示最终模型而不是 GenericForeignKey 链接表

python - Django 导入导出 - 无法使用 BinaryField 导入模型

PowerPoint 中功能区的 VBA 仅在使用 SaveAs/SaveCopyAs 后工作一次

typescript - RxJS和Typescript捕获相同类型的错误