如何遍历Django模型字段,并根据条件添加值

时间:2019-10-31 18:19:41

标签: python django django-models

我有一个模拟最多30个车站的火车线路的模型,因此该模型具有30个可为空的字段。

models.py

class TempLine(models.Model):
    picking_mode = models.IntegerField(default=1)
    start_station = models.CharField(max_length=2000)
    end_station = models.CharField(max_length=2000, null=True)
    station_1 = models.CharField(max_length=2000, null=True)
    station_2 = models.CharField(max_length=2000, null=True)
    station_3 = models.CharField(max_length=2000, null=True)
    station_4 = models.CharField(max_length=2000, null=True)
    station_5 = models.CharField(max_length=2000, null=True)
    station_6 = models.CharField(max_length=2000, null=True)
    station_7 = models.CharField(max_length=2000, null=True)
    station_8 = models.CharField(max_length=2000, null=True)
    station_9 = models.CharField(max_length=2000, null=True)
    station_10 = models.CharField(max_length=2000, null=True)
    station_11 = models.CharField(max_length=2000, null=True)
    station_12 = models.CharField(max_length=2000, null=True)
    station_13 = models.CharField(max_length=2000, null=True)
    station_14 = models.CharField(max_length=2000, null=True)
    station_15 = models.CharField(max_length=2000, null=True)
    station_16 = models.CharField(max_length=2000, null=True)
    station_17 = models.CharField(max_length=2000, null=True)
    station_18 = models.CharField(max_length=2000, null=True)
    station_19 = models.CharField(max_length=2000, null=True)
    station_21 = models.CharField(max_length=2000, null=True)
    station_22 = models.CharField(max_length=2000, null=True)
    station_23 = models.CharField(max_length=2000, null=True)
    station_24 = models.CharField(max_length=2000, null=True)
    station_25 = models.CharField(max_length=2000, null=True)
    station_26 = models.CharField(max_length=2000, null=True)
    station_27 = models.CharField(max_length=2000, null=True)
    station_28 = models.CharField(max_length=2000, null=True)
    station_29 = models.CharField(max_length=2000, null=True)
    station_30 = models.CharField(max_length=2000, null=True)

正在使用ajax请求一一添加数据。

所以我必须遍历从station_1开始的所有字段。.检查是否为空,如果没有,则添加..只需进入下一个。

这是我尝试执行的操作:

def adding_inline_stations(request):
    in_line_station = request.GET.get('inLine_stations', None)
    obj = TempLine.objects.filter()[0]
    for f in obj._meta.get_fields[3:]:
        if f is None:
            f = in_line_station
            f.save()
        else:
            pass

返回错误TypeError: 'method' object is not subscriptable

2 个答案:

答案 0 :(得分:2)

您应该制作桩号模型。尽管您只需要一分钟就可以知道车站的名称,但是它很快就会变成需要一个位置,营业时间等信息。

一旦建立了这样的模型(即使它只有一分钟的名称,即使它只有一个字段),也要与您的生产线建立多对多关系,并以与任何其他相关模型字段相同的方式访问它们

作为一般的编程规则,如果要命名变量variable_n,则需要重新考虑是否需要将这些对象存储在某种类型的集合中

答案 1 :(得分:1)

首先出现错误:<Model>._meta.get_fields是方法,而不是属性;所以你需要:

for f in obj._meta.get_fields()[3:]:
# Note the call:             ^^

现在,您的设计似乎不正确。您要做的基本上是要求与Station模型建立关系。因此,请创建一个Station模型,例如name字段,其中包含电台的名称(以及所需的其他字段)。另外,请确保您清楚地考虑要与Line模型一起使用的关系;乍一看,对我来说似乎是多对多。