检查模型是否已有FK

时间:2018-04-05 09:26:34

标签: django model foreign-keys

我有以下型号:

class Device(models.Model):
   id = models.CharField(max_length=10, primary_key=True)

   def __str__(self):
       return self.id

class User(models.Model):
    id = models.CharField(max_length=10, primary_key=True)
    device = models.ForeignKey(Device, blank=True, null=True, on_delete=models.SET_NULL)

    def __str__(self):
        return self.id

当我尝试添加新用户时,我需要知道将要添加到该用户的设备尚未使用。

如何检查该设备是否已有用户使用FK?

2 个答案:

答案 0 :(得分:3)

您可以使用反向关系user_set检查它:

device.user_set.exists()

答案 1 :(得分:2)

如果每个设备只能链接到一个用户,那么看起来你的模型是错误的。我会将外键移动到Device模型。

class Device(models.Model):
   user = models.ForeignKey('User', blank=True, null=True, on_delete=models.SET_NULL)

   def __str__(self):
       return self.id

如果每个用户也只能拥有一个设备,那么一对一的字段将是更好的选择。你可以将它放在任何一种型号上。

class User(models.Model):
    id = models.CharField(max_length=10, primary_key=True)
    device = models.OneToOneField(Device, blank=True, null=True, on_delete=models.SET_NULL)

    def __str__(self):
        return self.id

如果你的模型中的关系正确,那么你最终必须编写更少的验证码。