如何修复以下Django代码?在函数命令中使用变量

时间:2014-07-19 03:00:35

标签: python django variables conditional-statements

我有两个标有'等于'的单选按钮。并且'不等于'。名称因设置的字段而异。例如,在“名称”字段之后,名称为radio_name,值等于'并且'不等于'。在Number字段之后,名称是radio_number,值等于'并且'不等于'。我希望这很清楚。我试图把条件变成一个函数,这样我就不必重复自己了。

这就是我尝试过但却无法正常工作的事情:

def condition(radio, var):
        if radio == 'equal to':
            objs = objs.filter(var__icontains=var)
        if radio == 'not equal to':
            objs = objs.exclude(var__icontains=var)
        return objs

然后在调用函数时:

if name:
        objs = condition(radio_name, name);
if number:
        objs = condition(radio_number, number);

我希望所有人都清楚这一点。 : - /

2 个答案:

答案 0 :(得分:1)

应该修复一些事情:

  • 您需要将objs传递给函数
  • 要传递字符串中的关键字参数,请使用argument unpacking
  • 行末
  • 不需要;

这是固定版本:

def condition(objs, radio, **kwargs):
    if radio == 'equal to':
        filters = {'%s__icontains' % key: value for key, value in kwargs.iteritems()}
        objs = objs.filter(**filters)
    if radio == 'not equal to':
        filters = {'%s__icontains' % key: value for key, value in kwargs.iteritems()}
        objs = objs.exclude(**filters)
    return objs

用法:

if name:
    objs = condition(objs, radio_name, name=name)
if number:
    objs = condition(objs, radio_number, number=number)

这仍有改进的余地,但我希望它有助于达到预期的效果。

答案 1 :(得分:0)

当你说"它没有工作时,"我对预期结果是什么以及实际发生了什么有点不清楚。查看您的代码,有一件事情就是您要检查无线电==等等于'依此类推 - 如果你输入的是一个单选按钮 object ,你可能需要引用该对象的value属性,例如:

if radio.value == 'equal to':
    objs = objs.filter(var__icontains=var)

"收音机"你自己建造的一级课程,或者你正在进口的东西?如果是前者,您可能需要考虑添加"类型"字段,所以你输入的第二个代码看起来像这样:

if radio.type == 'name':
    objs = condition(radio_name, name)
elif radio.type == 'number':
    objs = condition(radio_number, number)

顺便说一句,如果你用Python写作,你就不需要在行尾添加分号;我在上面的代码中删除了它们。