给定以下模型,如何将可以创建的计数关系的数量限制为键模型中的“ManyToMany”值?
例如,如果"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)如果用户试图向太多的设备添加一个密钥,或者如果他们将“计数”减少到少于已经使用该密钥的设备的数量,我将需要引发一个异常。一个设备可以有任意数量的密钥。
(我正在使用管理网站进行数据输入)
发布于 2013-11-09 00:49:45
该功能没有内置到Django框架中,但是您可以在view方法中创建自己的过滤器。
例如,
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-09 22:04:35
您可以监听每次向密钥实例添加设备时发送的m2m_changed django signal。
它看起来像这样:
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函数也会收到通知。
https://stackoverflow.com/questions/19863108
复制相似问题