当前位置: 首页 > 面试题库 >

在Django中仅允许一个模型实例

夏侯涵映
2023-03-14
问题内容

我想使用数据库模型为我的项目控制一些配置设置。例如:

class JuicerBaseSettings(models.Model):
    max_rpm = model.IntegerField(default=10)
    min_rpm = model.IntegerField(default=0)

此模型应该只有一个实例:

juicer_base = JuicerBaseSettings()
juicer_base.save()

当然,如果有人不小心创建了一个新实例,那就不是世界末日了。我可以做JuicerBaseSettings.objects.all().first()。但是,是否有一种方法可以将其锁定,从而无法创建多个实例?

鉴于Django从那时起发生了很大变化,是否有解决此问题的标准方法?还是我应该只使用.first()并接受可能重复的内容?


问题答案:

您可以重写save方法以控制实例数:

class JuicerBaseSettings(models.Model):

    def save(self, *args, **kwargs):
        if not self.pk and JuicerBaseSettings.objects.exists():
        # if you'll not check for self.pk 
        # then error will also raised in update of exists model
            raise ValidationError('There is can be only one JuicerBaseSettings instance')
        return super(JuicerBaseSettings, self).save(*args, **kwargs)


 类似资料:
  • 我一直在捕捉非数字时遇到问题。 我试过了,但抓不住。如果我让它捕获非数字,但不让用户再次尝试输入。。。它完全停止了我的代码。 这是我的密码:

  • 问题内容: 这个问题已经在这里有了答案 : 如何检测从不同位置登录Django Web应用程序的多次登录? (4个答案) 6年前关闭。 Django应用程序中每个用户只能允许一个并发登录吗?如果是,您如何处理? 问题答案: 这个问题主要在这里(stackoverflow.com)回答。

  • 我使用json-schema,并希望只允许在此文件中声明的属性通过验证。例如,如果用户在他们的json对象中传递一个“名称”属性,它将失败这个模式,因为“名称”在这里没有作为属性列出。 是否有一些类似于“必需”的功能只允许列出的属性通过?

  • 问题内容: 我有Foo模型,其中有栏杆。bar字段应该是唯一的,但允许为空,这意味着如果bar字段为,我想允许多个记录,但如果不是,则值必须是唯一的。 这是我的模型: 这是该表的相应SQL: 当使用管理界面在bar为null的情况下创建多个1个foo对象时,它给我一个错误:“此Bar的Foo已经存在。” 但是,当我插入数据库(PostgreSQL)时: 这样做很好,它允许我插入1条以上且bar为n

  • 问题内容: 我正在寻找这样做: 这是我要使用的版本(尽管我可以接受任何建议):http : //docs.djangoproject.com/en/dev/topics/db/models/#id7 Django支持吗?如果没有,是否有办法获得类似的结果? 问题答案: 更新的答案:正如人们在评论中指出的那样,原始答案未正确回答问题。实际上,只有模型是在数据库中创建的,不是。 一种解决方案是创建一个

  • 我发现的大部分stackoverflow结果都是用于序列化整个对象或反序列化的。我的一些想法… 是否可以从三个值字段中删除@SerializedName并只序列化不为null的值? 我是否可以在java中构建某种可选的数据类型对象,该对象基于具有值的数据类型进行设置? 这个对象是一个更大的对象的一部分,而subitems对象有一个相当大的深度,它只是一个注释。我希望这是一个重复的问题,我只是找不到