问题列表 - 第3296页

使用Django为抽象基类设置外键

我已经将两个类的公共属性分解为一个抽象基类,但是我有另一个模型需要引用其中一个类.不可能引用ABC,因为它实际上没有数据库表.

以下示例应说明我的问题:

class Answer(models.Model):
    ovramt = models.ForeignKey("Ovramt")
    question = models.ForeignKey("Question")
    answer = models.CharField(max_length=3, choices=(("yes","yes"),("no","no") ("NA","N/A"))
    likelihood = models.IntegerField(choices=LIKELY_CHOICES)
    consequence = models.IntegerField(choices=CONSEQUENCE_CHOICES)

    class Meta:
        abstract = True

class Answer_A(Answer):
    resident = models.ForeignKey("Resident")
    def __unicode__(self):
        return u"%s - %s - %s" %(self.ovramt.ssa.name, self.resident, self.question)    

class Answer_B(Answer):
    def __unicode__(self):
        return u"%s - %s" %(self.ovramt.ssa.name, self.question)    

class Answer_Risk(models.Model):
    answer = models.ForeignKey("Answer")
    risk = models.CharField(max_length=200)

    def __unicode__(self):
        return self.risk
Run Code Online (Sandbox Code Playgroud)

Answer_A和Answer_B略有不同,Answer_A还需要与另一个表的FK关系.Answer_B以后可能还需要一些特定的属性.如果我将Answer_B作为超类 - 并且具有Answer_A子类或组成它,那么问题仍然存在.

无论是Answer_A还是Answer_B,'风险'都是相同的.我还有其他模型需要引用'答案'而不管它的子类型.如何才能做到这一点?无论它的子类型如何,您如何引用类型?

更新:
我试图避免加入操作但我不认为我能够.是否值得在所有'答案'中引用'Resident'并在必要时将其归零?或者这被认为是非常糟糕的做法?

python django inheritance django-models

32
推荐指数
2
解决办法
2万
查看次数

修复了UIPickerView选择栏中的标签

在时钟应用程序,计时器屏幕显示了一个选择器(可能是一个UIPickerUIDatePickerModeCountDownTimer模式),在选择栏一些文本("小时",并在这种情况下,"分钟").

(编辑)请注意,这些标签是固定的:当拣选轮滚动时,它们不会移动.

有没有办法在标准UIPickerView组件的选择栏中显示这样的固定标签?

我没有找到任何有助于此的API.建议是添加一个UILabel作为选择器的子视图,但这不起作用.


回答

我按照Ed Marty的建议(下面回答),它的确有效!不完美,但它应该骗人.作为参考,这是我的实现,随意让它变得更好......

- (void)viewDidLoad {
    // Add pickerView
    self.pickerView = [[UIPickerView alloc] initWithFrame:CGRectZero];
    [pickerView release];
    CGSize pickerSize = [pickerView sizeThatFits:CGSizeZero];
    CGRect screenRect = [[UIScreen mainScreen] applicationFrame];
    #define toolbarHeight           40.0
    CGFloat pickerTop = screenRect.size.height - toolbarHeight - pickerSize.height;
    CGRect pickerRect = CGRectMake(0.0, pickerTop, pickerSize.width, pickerSize.height);
    pickerView.frame = pickerRect;

    // Add label on top of pickerView
    CGFloat top = pickerTop + 2;
    CGFloat height = pickerSize.height - …
Run Code Online (Sandbox Code Playgroud)

iphone cocoa-touch uipickerview

33
推荐指数
3
解决办法
3万
查看次数

使用常量数组的元素作为switch语句中的case

我正在尝试将一组按键映射到一组命令.因为我处理来自多个地方的命令,所以我想在键和命令之间设置一个抽象层,这样如果我更改底层键映射,我就不必更改很多代码.我目前的尝试看起来像这样:

// input.h
enum LOGICAL_KEYS {
    DO_SOMETHING_KEY,
    DO_SOMETHING_ELSE_KEY,
    ...
    countof_LOGICAL_KEYS
};

static const SDLKey LogicalMappings[countof_LOGICAL_KEYS] = {
    SDLK_RETURN,    // Do Something
    SDLK_ESCAPE,    // Do Something Else
    ...
};

// some_other_file.cpp
...
switch( event.key.keysym.key ) {
    case LogicalMappings[ DO_SOMETHING_KEY ]:
        doSomething();
        break;
    case LogicalMappings[ DO_SOMETHING_ELSE_KEY ]:
        doSomethingElse();
        break;
    ...
}
Run Code Online (Sandbox Code Playgroud)

当我尝试编译它(gcc 4.3.2)时,我收到错误消息:

错误:'LogicalMappings'不能出现在常量表达式中

我不明白为什么编译器有这个问题.我理解为什么你不允许在case语句中包含变量,但我认为你可以使用常量,因为它们可以在编译时进行评估.常量数组不适用于switch语句吗?如果是这样,我想我可以用以下代码替换数组:

static const SDLKey LOGICAL_MAPPING_DO_SOMETHING      = SDLK_RETURN;
static const SDLKey LOGICAL_MAPPING_DO_SOMETHING_ELSE = SDLK_ESCAPE;
...
Run Code Online (Sandbox Code Playgroud)

但这似乎不那么优雅.有人知道为什么你不能在这里使用常数数组吗?

编辑:我已经看到C++标准的一点声称,"一个整数常量表达式只能涉及文字(2.13),枚举器,常量变量或用常量表达式初始化的整数或枚举类型的静态数据成员(8.5) ...".我仍然不明白为什么常量数组不算作"用常量表达式初始化的枚举类型".可能只是我的问题的答案是"因为它就是它的方式",我将不得不解决它.但如果是这种情况,那就有点令人失望,因为编译器确实可以在编译时确定这些值.

c++ arrays syntax const switch-statement

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

UIViewController没有加载我的自定义UIView

这对于一个大师来说应该是直截了当的.我没有真正写出任何代码,只有几个控制器和一个自定义UIView.全部通过笔尖连接.该应用程序加载而不会崩溃,但我无法从我的自定义UIView中看到我的NSLog()命中.

我的应用程序委托具有默认模板代码,该代码调用我的一个名为TabAnimationController的类.TabAnimationViewController将其视图设置为TabView.我确保在TabAnimationViewController的NIB中,File的所有者设置为TabAnimationViewController,并且我的UIView实例将其类设置为TabView.

在TabView.m中,我试图了解NSLog将如何命中,并且它根本没有显示出来.

- (void)loadView {
 NSLog(@"calling loadView");
}

- (id)initWithFrame:(CGRect)frame {
NSLog(@"Calling initWithFrame:");
    return self;
}
Run Code Online (Sandbox Code Playgroud)

奇怪.我不确定为什么即使在正确的IB连接之后我的NSLog也不会出现.只有任何放入drawRect的东西:才会调用.为什么initWithFrame或loadView不会受到影响?如果我想以编程方式自定义此视图,该怎么办?

cocoa-touch

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

如何确保只订阅一次事件

我想确保我只在特定的类中为一个实例上的事件订阅一次.

例如,我希望能够做到以下几点:

if (*not already subscribed*)
{
    member.Event += new MemeberClass.Delegate(handler);
}
Run Code Online (Sandbox Code Playgroud)

我该如何实施这样的警卫?

c# events event-handling subscription

43
推荐指数
4
解决办法
2万
查看次数

在Java中:如何使用Keystore和Truststore证书握手安全连接?

如果我有2个端子A和B. TA通过安全插座连接连接TB.我需要编写代码来实现2个终端之间的连接.

如何使用Keystore和Truststore进行握手此类连接.换句话说,我在哪里放置密钥库/信任库证书文件?(TA或TB)

非常感谢任何好的建议或好的例子.

谢谢

java security keystore truststore

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

获取对象的所有已定义函数

是否有相当于get_defined_functions()仅显示给定对象的功能?

用法和输出示例:

class A {
    function foo() { }
    function bar() { }
}
class B extends A {
    function foobar() { }
}
$b = new B();
print_r(get_object_functions($b));

// Array (
//  0 => "foo",
//  1 => "bar",
//  2 => "foobar"
//)
Run Code Online (Sandbox Code Playgroud)

php reflection function

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

好的DataGridView教程

我正在编写一个Windows C#应用程序,我希望使用数据网格视图,但无法找到一个好的教程来完全控制datagrid,例如:添加列,添加数据等.

datagridview winforms

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

我应该在python函数/方法上做多少输入验证?

我对他们编写的Python中有多少前期验证感兴趣.

以下是一些简单函数的示例:

def factorial(num):
    """Computes the factorial of num."""

def isPalindrome(inputStr):
    """Tests to see if inputStr is the same backwards and forwards."""

def sum(nums):
    """Same as the built-in sum()... computes the sum of all the numbers passed in."""
Run Code Online (Sandbox Code Playgroud)

在开始计算之前检查输入值有多彻底,如何进行检查?如果输入有问题(例如,在同一模块中定义了BadInputException),是否会抛出某种专有异常?你刚刚开始你的计算,并认为如果传入错误的数据(例如,"asd"到factorial),它会在某个时刻抛出异常吗?

当传入的值应该是一个容器时,你不仅检查容器,还检查其中的所有值?

那些像f​​actorial这样的情况怎么样,传入的内容可以转换为int(例如浮点数),但这样做可能会失去精度?

python validation

15
推荐指数
3
解决办法
3513
查看次数

如何从生成器构建numpy数组?

如何从生成器对象中构建numpy数组?

让我来说明一下这个问题:

>>> import numpy
>>> def gimme():
...   for x in xrange(10):
...     yield x
...
>>> gimme()
<generator object at 0x28a1758>
>>> list(gimme())
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> numpy.array(xrange(10))
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
>>> numpy.array(gimme())
array(<generator object at 0x28a1758>, dtype=object)
>>> numpy.array(list(gimme()))
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
Run Code Online (Sandbox Code Playgroud)

在这个例子中,gimme()是我想要变成数组的输出的生成器.但是,数组构造函数不会迭代生成器,它只是存储生成器本身.我想要的行为来自numpy.array(list(gimme())),但我不想支付同时在内存中使用中间列表和最终数组的内存开销.有更节省空间的方式吗?

python numpy generator

146
推荐指数
4
解决办法
5万
查看次数