我有一个非常复杂的验证要求,我无法让Django管理员满足它.
我有一个主模型(django.contrib.auth.models.User)和几个看起来像的模型
class SomeProfile(models.Model):
user = models.OneToOneField(User)
# more fields
Run Code Online (Sandbox Code Playgroud)
我想检查一下,如果用户属于某个组,则它具有相应的配置文件.因此,如果用户在组中,Foo他应该非空FooProfile.
我在哪里放置此验证规则?我不能把它放在模型中.实际上,当表单被验证时,用户还没有被创建,因此我无法访问他的组.所以我需要求助于表单验证.这就是我所说的:
class UserAdminForm(forms.ModelForm):
"""
A custom form to add validation rules which cannot live in the
model. We check that users belonging to various groups actually
have the corresponding profiles.
"""
class Meta:
model = User
def clean(self):
# Here is where I would like to put the validation
class FooInline(admin.TabularInline):
model = FooProfile
max_num = 1
class UserAdmin(admin.ModelAdmin):
model = User
form …Run Code Online (Sandbox Code Playgroud) 我经常通过使用Scalaz pimps找到解决问题的简洁方法.通常解决方案就像
import scalaz._
import Scalaz._
foobar frobnicate quux
// magic
Run Code Online (Sandbox Code Playgroud)
现在,我希望能够看到我实际上用于添加到我Foobar的frobnicate方法的含义.通过这种方式,我可以进行更精确的导入,并学习有关我隐含使用的工具的新内容.
有没有办法找出编译器实际用于编译某个表达式的隐式转换?
我是Akka的初学者,我喜欢它为异步编程提供的许多功能,例如Actors,Agents或Futures.
Akka的一个强烈卖点是,当一个演员崩溃时,一个等同的演员由演员系统重新创建并插入旧演员系统,保证强大的稳定性.
其他一些系统(我被告知JMS是其中一个)更进一步,持续不断地在演员之间发送消息.这样,如果机器在物理上崩溃 - 比如由于硬件故障 - 仍然可以恢复故障之前的状态.
这对我正在开发的应用程序非常有吸引力.Akka是否提供任何此类机制?如果没有,是否有某种方法可以将其与外部系统集成,从而实现这一目标?
我正在尝试编写必须连接到HBase的Scalding作业,但我无法使用HBase tap.我尝试使用Twitter Maple提供的点击,遵循这个示例项目,但似乎我正在使用的Hadoop/HBase版本与Twitter用作客户端的版本之间存在一些不兼容性.
我的集群运行Cloudera CDH4,HBase 0.92和Hadoop 2.0.0-cdh4.1.3.每当我启动连接到HBase的Scalding作业时,我都会得到异常
java.lang.NoSuchMethodError: org.apache.hadoop.net.NetUtils.getInputStream(Ljava/net/Socket;)Ljava/io/InputStream;
at org.apache.hadoop.hbase.ipc.HBaseClient$Connection.setupIOstreams(HBaseClient.java:363)
at org.apache.hadoop.hbase.ipc.HBaseClient.getConnection(HBaseClient.java:1046)
...
Run Code Online (Sandbox Code Playgroud)
似乎Twitter Maple使用的HBase客户端期望NetUtils在我的集群上部署的Hadoop版本上不存在某种方法.
如何找出错误的确切位置 - HBase客户端期望的版本等等?通常有一种缓解这些问题的方法吗?
在我看来,通常客户端库是使用Hadoop依赖项的硬编码版本编译的,并且很难使它们与部署的实际版本匹配.
我正在尝试编写一个应该将其输出放入HBase的Spark作业.据我所知,这样做的正确方法是使用方法saveAsHadoopDataset上org.apache.spark.rdd.PairRDDFunctions-这需要我的RDD是由对.
该方法saveAsHadoopDataset需要一个JobConf,这就是我想要构建的.根据这个链接,我必须设置的一件事JobConf是输出格式(实际上它没有用),比如
jobConfig.setOutputFormat(classOf[TableOutputFormat])
Run Code Online (Sandbox Code Playgroud)
问题是显然这不会编译,因为它TableOutputFormat是通用的,即使它忽略了它的类型参数.所以我尝试了各种组合,比如
jobConfig.setOutputFormat(classOf[TableOutputFormat[Unit]])
jobConfig.setOutputFormat(classOf[TableOutputFormat[_]])
Run Code Online (Sandbox Code Playgroud)
但无论如何我都会收到错误
required: Class[_ <: org.apache.hadoop.mapred.OutputFormat[_, _]]
Run Code Online (Sandbox Code Playgroud)
现在,据我所知,Class[_ <: org.apache.hadoop.mapred.OutputFormat[_, _]]转换为Class[T] forSome { type T <: org.apache.hadoop.mapred.OutputFormat[_, _] }.这是我认为我有问题的地方,因为:
Class 是不变的TableOutputFormat[T] <: OutputFormat[T, Mutation]但是T <: OutputFormat[_, _]有没有办法获得的一个亚型OutputFormat[_, _]的TableOutputFormat?似乎问题源于Java和Scala中的泛型之间的差异 - 我能为此做些什么?
编辑:
事实证明这甚至更微妙.我试图在REPL中定义自己的方法
def foo(x: Class[_ <: OutputFormat[_, _]]) = x
Run Code Online (Sandbox Code Playgroud)
我实际上可以调用它
foo(classOf[TableOutputFormat[Unit]])
Run Code Online (Sandbox Code Playgroud)
甚至
foo(classOf[TableOutputFormat[_]])
Run Code Online (Sandbox Code Playgroud)
对那个问题.但我不能打电话
jobConf.setOutputFormat(classOf[TableOutputFormat[_]]) …Run Code Online (Sandbox Code Playgroud) 我是OCaml的完全初学者,但我在介绍性示例中看到的代码类似于以下内容
let sum = List.fold ~f:(+.) ~init:0.0
Run Code Online (Sandbox Code Playgroud)
在这个片段中困扰我的是显式使用List.fold.在我所知道的大多数语言中,容器的显式类型将通过使用接口,特征或类型类来抽象,以便可以重用此代码来对数组或任何其他顺序容器求和.
什么是OCaml方式使这更通用?
我试图在Nim中简单地使用类型类.请记住,我从今天早上起就一直在使用Nim,所以我可能一直在做一些愚蠢的事情.
无论如何,我想定义一个伪随机生成器,它生成一个类型的值流T.有时T是数字,因此有必要了解可达到的最小值和最大值 - 比如重新调整值.这是我的类型
type
Generator*[T] = generic x
next(var x) is T
BoundedGenerator*[T] = generic x
x is Generator[T]
min(x) is T
max(x) is T
Run Code Online (Sandbox Code Playgroud)
我也有这样的例子LinearCongruentialGenerator.
假设我想用它来定义Uniform在一个区间内产生浮点值的生成器.我试过了
type Uniform* = object
gen: BoundedGenerator[int]
min_p: float
max_p: float
proc create*(gen: BoundedGenerator[int], min: float, max: float): Uniform =
return Uniform(gen: gen, min_p: min, max_p: max)
Run Code Online (Sandbox Code Playgroud)
我省略了明显的定义next,min和max.
然而,由于以上原因,上述内容无法编译 Error: 'BoundedGenerator' is not a concrete type
如果我明确地LinearCongruentialGenerator代替 …
是否可以编写与正则表达式匹配的正则表达式?有没有人有例子?如果存在一些理论障碍,是否有人知道正则表达式至少匹配最常见的正则表达式模式?
我正在编写一些广泛使用文件系统的对象.我不确定测试它们的正确方法是什么.
我在理论上知道我应该在一些对象中抽象文件系统功能然后模拟它们,但在我的情况下它将毫无意义:我想要测试的类的主要用途是管理文件.因此,在测试新对象时,我会遇到同样的问题,只需移动一个级别.
我可以考虑进行测试的唯一方法是实际使用文件系统.问题是测试将在浏览器和命令行中运行,因此我需要在每个人都具有写访问权限的目录中工作.而且,这似乎不是一个非常便携的解决方案.
有任何想法吗?
我正在学习CouchDB I并非常喜欢它的功能.但有一件事让我感到困惑,而CouchDB通过JSON进行通信的主张就是这样.
实际上,JSON要求对象的键是字符串,而有可能,甚至Damien Katz自己也建议使用返回其键是其他对象或数组的对象的视图.
这很令人困惑,因为我没有发现CouchDB使用JSON变体的任何地方.此外,它没有多大意义,至少有两个原因:
两个键何时被认为相等?例如,我假设如果CouchDB允许不是字符串的键,则允许使用数字.但是然后键5和'5'将是不同的,这是奇怪的,因为在Javascript中它们被认为是相同的.
更重要的是,解析CouchDB的输出将更加困难,因为不能使用可用于每种语言的标准JSON解析器.
我只是在解释上面的链接时感到困惑,或者实际上CouchDB是否返回了非标准的JSON输出?如果是这样,一个人如何使用它?
scala ×3
hadoop ×2
hbase ×2
akka ×1
apache-spark ×1
cascading ×1
containers ×1
couchdb ×1
django ×1
django-admin ×1
filesystems ×1
generics ×1
json ×1
nim-lang ×1
ocaml ×1
persistence ×1
php ×1
regex ×1
scalaz ×1
scalding ×1
typeclass ×1
unit-testing ×1
validation ×1