小编gaa*_*kam的帖子

在Django模型中覆盖clean方法会破坏其他验证吗?

假设我有一个简单的模型,models.py可以通过Django Admin编辑:

class Range(models.Model):
    gt = models.IntegerField('Greater than')
    lt = models.IntegerField('Lesser than')

    def clean(self):
        if self.gt >= self.lt:
            raise ValidationError('Incorrect range')
Run Code Online (Sandbox Code Playgroud)

问题:尽管以上代码在确保gt小于的假设方面做得很好lt,但是它也破坏了Django提供的其他基本验证。例如,如果我在Django admin中为这些字段输入了一些非数字数据,则会看到跨越多个屏幕的调试消息:

在此处输入图片说明

如果我clean(self)从的定义中删除了覆盖的方法Range,则此基本验证将再次开始正常工作:

在此处输入图片说明

但当然,现在我可以进入Range以s gt大于lt

我真的不知道我在做什么错,因为我只是按照https://docs.djangoproject.com/zh-CN/1.9/ref/models/instances/#validating-objects遵循Django文档

我的错误在哪里?如何正确地为我的表格提供验证?

django validation django-models django-admin

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

foo(bar())等代码中的函数执行顺序是什么?

假设我们在C或C++中有这样的代码:

foo(bar());
Run Code Online (Sandbox Code Playgroud)

在这种情况下,函数执行顺序是什么?

  1. 是否需要bar()首先调用,并且foo()bar()返回之前调用no ,在这种情况下foo()传递返回值为bar()
  2. 允许编译器重新排序上面的内容,即它foo()首先调用,并延迟调用,bar()直到实际需要的参数foo()值的代码foo()

案例2可能对优化有用,应该foo()像这样定义:

void foo(someType par) {
    if(someTest())
        baz1();
    else
        baz2(par);
}
Run Code Online (Sandbox Code Playgroud)

在这种情况下,bar()如果someTest()返回,甚至可以完全跳过调用false.

但是,案例2也会使程序员必须更加小心,因为它有时会导致细微的错误(例如重复发生).

c c++

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

如何处理C中的交互式输入/输出?

根据C FAQ:http://c-faq.com/stdio/scanfprobs.html

我们不应该使用scanf交互式输入输出,而是应该使用读取整行,fgets然后尝试解析它sscanf,如果sscanf返回解析错误,则提示用户再次输入输入.

这个,IIUC,会导致这样的代码:

#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>

int main()
{
        char inpbuff[5];
        signed char n;

        bool read_correctly = false;
        while(!read_correctly) {
            printf("Please enter an 8bit number: ");
            if(fgets(inpbuff, sizeof(inpbuff), stdin) == NULL)
                return EXIT_FAILURE;
            if(sscanf(inpbuff, "%hhd", &n) == 1)
                read_correctly = true;
        }

        printf("You have entered: %hhd\n", n);
        return EXIT_SUCCESS;
}
Run Code Online (Sandbox Code Playgroud)

对我来说,如果用户键入的行超过提供的缓冲区大小,则此方法会产生问题fgets.即使在上面的程序中,如果用户键入asdf或者问题,也会出现问题asdf14.

在这种情况下,理想情况下,我们应该忽略所有字符,直到我们看到'\n',忽略它\n,然后再次要求用户提供他们的输入.这将导致这样的方法:

#include <stdio.h>
#include <stdbool.h>
#include …
Run Code Online (Sandbox Code Playgroud)

c io design-patterns interactive

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

如何在单例服务中使用数据库上下文?

我想将完成的国际象棋游戏存储在数据库中,以支持用户观看重播。

到目前为止,我有一个单例GameManager存储所有正在进行的游戏。因此,startup.cs我有以下代码行:

services.AddSingleton<IBattleManager, BattleManager>();
Run Code Online (Sandbox Code Playgroud)

现在,我想BattleManager访问DbContext保存已完成的游戏。

public class BattleManager : IBattleManager
{
    //...
    private void EndGame(ulong gameId)
    {
        var DbContext = WhatDoIPutHere?
        lock(gameDictionary[gameId])
        {
            DbContext.Replays.Add(new ReplayModel(gameDictionary[gameId]));
            gameDictionary.Remove(gameId)
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

是否有可能实现这一目标?怎么样?

尝试失败:

public class BattleManager : IBattleManager
{
    Data.ApplicationDbContext _context;
    public BattleManager(Data.ApplicationDbContext context)
    {
        _context = context;
    }
}
Run Code Online (Sandbox Code Playgroud)

这显然会失败,因为无法DbContext像这样将EF Core 注入到Singleton服务中。

我有一种模糊的感觉,我应该做这样的事情:

using (var scope = WhatDoIPutHere.CreateScope())
{
    var DbContext = scope.ServiceProvider.GetRequiredService<ApplicationDbContext>();
    DbContext.Replays.Add(new ReplayModel(...));
}
Run Code Online (Sandbox Code Playgroud)

这是正确的方向吗?

singleton entity-framework-core asp.net-core

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

是一个浮点类型?

我一直认为在C++中short是一个整数类型.

但是,维基百科在本文中以浮点类型列出它:

https://en.wikipedia.org/wiki/Machine_epsilon

我糊涂了.

我很确定short通常是一个整数,但是因为C++是一个有很多陷阱的巨大语言......我可能会问,在C++中是否有合法的,即使是模糊的方式short用作浮点类型?

c++ floating-point short language-lawyer

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

Is it possible to use `let in` in an instance clause?

import Prelude hiding (Either (..))

data Tree a = Empty | Node a (Tree a) (Tree a)

instance Show a => Show (Tree a) where
  show t = show ST t

data ShowableTree a = ST Int (Tree a)

instance Show a => Show (ShowableTree a) where
  let
    indent 0 = ""
    indent n = "\t" ++ (indent n-1)
  in
    show (ST depth Empty) = (indent depth) ++ "()"
    show (ST depth (Node n l r)) =
      let
        stl = …
Run Code Online (Sandbox Code Playgroud)

haskell compiler-errors syntax-error

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

是否可以使用CSS垂直显示表格行?

我有这样一张桌子:

<table>
  <thead>
    <tr>
      <th>Name</th>
      <th>Phone no.</th>
      <th>Address</th>
      <th>Wealth</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <th>John Doe</th>
      <td>00123456789</td>
      <td>Morgue St. 21</td>
      <td>$100,000</td>
    </tr><tr>
      <th>Mary Sue</th>
      <td>00987654321</td>
      <td>Impossible St. 12</td>
      <td>$999,999,999,999,999</td>
    </tr><tr>
      <th>Cpt. Kirk</th>
      <td>00999999999</td>
      <td>Enterprise St. 22</td>
      <td>$100,000,000</td>
    </tr>
  </tbody>
</table>
Run Code Online (Sandbox Code Playgroud)

嗯,这张桌很宽.现在我必须制作一个样式表,使网站适合在狭窄的屏幕上观看,如手机.所以我必须做这个宽桌子.

我在想这张桌子是否可以垂直显示,而不是水平显示.更具体地说,我在想它是否可以显示更像这样:

<ul>
  <li><strong>John Doe:</strong>
    <ul>
      <li><em>Phone no.:</em> 00123456789</li>
      <li><em>Address:</em> Morgue St. 21</li>
      <li><em>Wealth:</em> $100,000</li>
    </ul>
  </li><li><strong>Mary Sue:</strong>
    <ul>
      <li><em>Phone no.:</em> 00987654321</li>
      <li><em>Address:</em> Impossible St. 12</li>
      <li><em>Wealth:</em> $999,999,999,999,999</li>
    </ul>
  </li><li><strong>Cpt. Kirk:</strong>
    <ul>
      <li><em>Phone no.:</em> 00999999999</li>
      <li><em>Address:</em> Enterprise St. 22</li>
      <li><em>Wealth:</em> $100,000,000 …
Run Code Online (Sandbox Code Playgroud)

html css html-table vertical-alignment

0
推荐指数
2
解决办法
2454
查看次数

Can I use special characters like tabulations and newlines in Show?

data Pair = P Int Int

instance Show Pair where
  show (P n1 n2) = (show n1) ++ "\t" ++ (show n2)
Run Code Online (Sandbox Code Playgroud)

Result:

GHCi, version 7.6.3: http://www.haskell.org/ghc/  :? for help
\Loading package ghc-prim ... linking ... done.
Loading package integer-gmp ... linking ... done.
Loading package base ... linking ... done.
[1 of 1] Compiling Main             ( labn.hs, interpreted )
Ok, modules loaded: Main.
*Main> show (P 5 6)
"5\t6"
Run Code Online (Sandbox Code Playgroud)

OK for a pair of ints this might be an …

printing string haskell

0
推荐指数
1
解决办法
57
查看次数

如何很好地表示三个条件的替代方案?

假设我有一个角色c :: Char。现在,我想看看它是否等于aisDigit

isAOrDigit = (||) <$> (=='a') <*> (isDigit)
Run Code Online (Sandbox Code Playgroud)

到目前为止,一切都很好。但现在我想看看它是否等于aisDigit或介于dg。不幸的是,由于||仅接受2个参数,所以我不能说(||) <$> (=='a') <*> (isDigit) <*> (`elem`['d'..'g'])

有没有什么好办法可以写这个,还是我必须回到这个:

isACOrDigitOrDG c = c == 'a' || isDigit c || c `elem` ['d'..'g']
Run Code Online (Sandbox Code Playgroud)

haskell

0
推荐指数
2
解决办法
113
查看次数

为什么两个空字符串比较不相等?

my@comp:~/wtfdir$ cat wtf.sh
str1=$(echo "")
str2=$(echo "")

if [ $str1 != $str2 ]; then
  echo "WTF?!?!"
fi
my@comp:~/wtfdir$ ./wtf.sh
WTF?!?!
my@comp:~/wtfdir$
Run Code Online (Sandbox Code Playgroud)

WTF正在这里?

我是如何编写以上代码的:谷歌搜索“ bash比较字符串”使我进入了该网站,其中说:

您可以使用if语句检查bash中两个字符串的相等和不相等。“ ==”用于检查是否相等,“!=”用于检查字符串的不平等。

但是我得到了以上吗?

我不明白什么?我究竟做错了什么?

string bash string-comparison

0
推荐指数
1
解决办法
74
查看次数

使粒子在圆圈内随机移动

我试图使绘制点在已知半径和中心的圆内移动.目前我能够在边界内生成点,但现在我需要让它们移动.

我有以下脚本来生成粒子的初始位置.

function [particle_gen] = generate(n,centre,radius)
    %generates n particles in a circle with specified centre and radius

    angle = 2 * pi * rand(n,1);
    r = radius * sqrt(rand(n,1));
    X = r.*cos(angle) + centre(1);
    Y = r.*sin(angle) + centre(2);
    plot(X,Y,'.k')
end
Run Code Online (Sandbox Code Playgroud)

我想为它们设置动画,使粒子以恒定的速度沿直线行进,直到它们撞到圆形边界并反弹.我需要这一切都发生在同一个情节中.

matlab animation simulate matlab-figure

-3
推荐指数
1
解决办法
1859
查看次数