首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >赋予用户添加SQL约束的能力,Django

赋予用户添加SQL约束的能力,Django
EN

Stack Overflow用户
提问于 2011-11-04 16:31:59
回答 1查看 465关注 0票数 2

我有一个奇怪的需求,一个客户要求我实现一个webapp来支持他的数据库。因为我爱Django,所以我决定用它。

我很难理解的额外需求如下:用户应该有额外的“能力”来创建模型约束,比如检查IntegerField的范围,所有这些都不了解Python。

所以,我有一些想法,但我不确定什么是(如果有)正确的。以下是我的想法:

  1. 使用JavaScript实现模板端验证
  2. 实现Python脚本和编写models.py文件的用户友好方式(这听起来很糟糕)
  3. 使用原始SQL CHECK约束编写一些管理操作,但我仍然不知道如何编写

这个请求可以解决吗?你能告诉我最简单的方法吗?

提前谢谢你,

-弗拉维奥

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-11-05 12:49:23

是的,这确实是可能的。我们将使用自定义对象管理器动态Q对象来解决这个问题。下面是一个例子。

  1. 创建一个适当的模型来存储有关约束的信息。注意,我们将ForeginKey创建为ContentType,以便将约束绑定到特定的模型类。 #your/models.py s.py从django.contrib.contenttypes.models导入ContentType从django.contrib.auth.models导入用户类PerUserConstraint(models.Model):user = models.ForeignKey( User ) content_type = models.ForeignKey(ContentType) field_name = models.CharField(max_length = 255)谓词= models.CharField(max_length = 255) #
  2. 创建一个自定义管理器,并将其注册到您的模型中。# your _app/model s.py来自django.db.models.query_utils导入Q类ConstraintedManager(models.Manager):def get_constrainted_query(self,:qs = self.model.objects.all() content_type =PerUserConstraint.objects.filter约束( user = user,content_type = content_type )如果约束: filters = []用于约束:filters.append(‘%s__%s’% (constraint.field_name,constraint.predicate),constraint.value) #在这一点上,过滤器应该是这样的:#(‘问题__包含’,‘晚餐’),(‘问题__包含’,‘餐’) q_list = Q(x)在过滤器中返回qs.filter(operator.and_,( q_list)) #,它类似于#返回qs.filter(Q(question__contains =‘question__contains’)和Q(question__contains =‘question__contains’)),否则:返回qs类YourModel(models.Model):#一些字段.C= ConstraintedManager()

因此,在您的视图中,您将能够像这样使用它:YourModel.c.get_constrainted_query(user)

请注意,我没有测试这段代码,但我希望您已经掌握了这个概念。

若要重写ModelAdmin中的查询,请使用技术。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8012624

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档