1

给定以下模型,如何将可以创建的 ManyToMany 关系的数量限制为 Key 模型中的“count”值?

例如,如果“count”为 2,则只有 2 个设备可以使用该密钥。

楷模:

class Device(models.Model):
    name = models.CharField(max_length=100, unique=True)

class Key(models.Model):
    key = models.CharField(max_length=100, unique=True)
    count = models.IntegerField(default=1)
    device = models.ManyToManyField(Device, blank=True, null=True)

如果用户尝试将密钥添加到太多设备,或者如果他们将“计数”减少到少于已经使用该密钥的设备数量,我将需要引发异常。一个设备可以有任意数量的键。

(我正在使用管理站点进行数据输入)

4

2 回答 2

1

此功能未内置在 Django 框架中,但您可以在视图方法中创建自己的过滤器。

例如,

MAXKEYS = 3

def addNewKey(request):
  if request.user.is_authenticated():
    deviceRequest = Device.objects.get(pk = request.GET["deviceId"])
    keys = Key.objects.filter(device = deviceRequest)

    if len(keys) < MAXKEYS:
      #add new key reference
    else:
      #return an error or something

  else:
    #return user is not authenticated error message
于 2013-11-08T16:49:45.223 回答
1

您可以收听每次将设备添加到 Key 实例时发送的m2m_changed django 信号。

它看起来像这样:

def device_added(sender, **kwargs):
     print "action == %s"%kwargs['action'] # You should intercept when action is 'pre_add'
     print "keyInstanceCount == %s"%kwargs['instance'].count # this is where you can check the current count field and raise your exception if it is exceeding the limit

m2m_changed.connect(device_added, sender=Key.device.through)

连接m2m_changed到 后device_added,每次将设备添加到关键实例device_added函数时也会收到通知。

于 2013-11-09T14:04:35.080 回答