小编Dav*_* R.的帖子

当 Many=True 时验证数据列表

假设给出以下模型和序列化器。

class Human(models.Model):
    name = models.TextField(unique=True)

class HumanSer(serializers.ModelSerializer):
    class Meta:
        model = Human
        fields = '__all__'
Run Code Online (Sandbox Code Playgroud)

我想验证一下,当给出一个名称列表时,该列表中的名称不会重复,而无需访问数据库(更多内容见下文)。

data = [{'name': 'John}, {'name': 'John'}]
ser = HumanSer(data=data, many=True)
Run Code Online (Sandbox Code Playgroud)

在完美的世界中,我会添加validate_name方法,访问所有先前验证的条目,并引发“ValidationError”。

目前这似乎不可能,所以我找到的选项是:

  1. 访问.initial_data并进行比较。这似乎不太可靠,因为我必须小心,因为我正在处理未经验证的原始数据;注意数据是否是列表等。
  2. 什么都不做,在这种情况下.is_valid()返回True,但.save()抛出异常。在这种情况下,REST 调用整体失败,我无法指出名称重复的用户。

django django-rest-framework

6
推荐指数
1
解决办法
2526
查看次数

如何告诉 CMake 不要缓存变量

我正在使用 CMake 从存在于指定位置的文件动态自定义创建文件。这是我的代码:

file(GLOB files "${path}/*.data")
file(GLOB sidedata "${path}/*.sidedata")

foreach(file ${files})
   get_filename_component(name ${file} NAME_WE)
   add_custom_command(
      OUTPUT "${name}.library"
      DEPENDS ${path} ${file} ${sidedata} ${CMAKE_CURRENT_SOURCE_DIR}/makelibrary.pl
      COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/makelibrary.pl ARGS ${sidedata} ${file}
      COMMENT "Generating ${name}.library"
   )
   add_custom_target(${name}.target ALL DEPENDS ${name}.library)
   install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${name}.library DESTINATION ${somewhere})
endforeach()
Run Code Online (Sandbox Code Playgroud)

我看到filessidedata被缓存的问题 - 如果将新文件添加到path位置,则不会被检测到;如果文件被删除,依赖性检查将失败。

我该如何解决这个问题?

cmake

5
推荐指数
1
解决办法
1925
查看次数

SVG 中相邻的矩形元素留下微小间隙

我正在尝试使用 SVG 创建调色板。为此,我了解了许多rect元素,并且只更改了每个元素的样式。问题是,有时元素之间有微小的白色条子,如下图所示:

SVG调色板

此快照是在 OSX 上的 Chrome 中拍摄的。Safari 看起来很相似。

在我的代码中viewBox不是恒定的,并且可以根据矩形的数量而变化。此外,宽度和高度也可能根据所选分辨率而变化。换句话说,我无法通过这些来让这个看起来正确。

我尝试创建比必要的更宽的每个矩形,但效果是相同的。在上图中,顶行的宽度为100.1,而底部的宽度为100。使宽度101起作用,但我不能使用它,因为在某些情况下 a 的预期宽度rect可能是个位数,因此宽度的额外 1 是显着的重叠。

我尝试添加笔画,但这不起作用,因为完成这项工作所需的宽度取决于viewBoxrect

你见过这个问题吗?

这是我的代码:

<html>
<body>
    <svg width="1000" height="1000" viewBox="0 0 5000 5000">
        <g>
            <rect x="0" y="0" width="100.1" height="100" style="fill:rgb(0,0,255)"></rect>
            <rect x="100" y="0" width="100.1" height="100" style="fill:rgb(0,0,250)"></rect>
            <rect x="200" y="0" width="100.1" height="100" style="fill:rgb(0,0,245)"></rect>
            <rect x="300" y="0" width="100.1" height="100" style="fill:rgb(0,0,240)"></rect>
            <rect x="400" y="0" width="100.1" height="100" style="fill:rgb(0,0,235)"></rect>
            <rect x="500" y="0" width="100.1" height="100" style="fill:rgb(0,0,230)"></rect> …
Run Code Online (Sandbox Code Playgroud)

svg

5
推荐指数
1
解决办法
393
查看次数

在迁移中处理 GenericRelation 和 GenricForeignKey

我有带有 GenricForeigKey 和 GenericRelation 字段的模型。

class Datasheet(models.Model):
    package1 = GenericRelation('PackageInstance')
    ...

class PackageInstance(models.Model):
    content_object = GenericForeignKey()
    object_id = models.PositiveIntegerField(null=True)
    content_type = models.ForeignKey(ContentType, null=True, on_delete=models.CASCADE)
    ....

Run Code Online (Sandbox Code Playgroud)

我正在从另一个模型迁移,在迁移中我想创建新实例。

    for ds in Datasheet.objects.all():
        pi = PackageInstance.objects.create(content_object=ds)
Run Code Online (Sandbox Code Playgroud)

然而这失败了

TypeError: DesignInstance() got an unexpected keyword argument 'content_object'
Run Code Online (Sandbox Code Playgroud)

另外,ds.package1.all()也会失败。

AttributeError: 'Datasheet' object has no attribute 'package1'
Run Code Online (Sandbox Code Playgroud)

我该如何解决这个问题?

django django-contenttypes django-migrations django-generic-relations

5
推荐指数
1
解决办法
753
查看次数