鉴于以下模型,如何在Key模型中将可以创建的ManyToMany关系的数量限制为“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)
如果用户尝试将密钥添加到太多设备,或者将“count”减少到小于已使用密钥的设备数量,则需要引发异常。设备可以有任意数量的密钥。
(我正在使用管理站点进行数据输入)
答案 0 :(得分:1)
此功能未内置于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
答案 1 :(得分:1)
您可以收听每次将设备添加到Key实例时发送的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
时,系统都会收到通知。