我正在尝试使用每个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,反之亦然。

django-2.2之前,您可以使用 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/

10-10 13:58
查看更多