我有一个模拟最多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
答案 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
模型一起使用的关系;乍一看,对我来说似乎是多对多。