Python 如何迭代Django模型字段,并根据条件添加值
我有一个模型,它模拟了一条最多有30个车站的火车线路,因此该模型有30个可为空的字段 型号.pyPython 如何迭代Django模型字段,并根据条件添加值,python,django,django-models,Python,Django,Django Models,我有一个模型,它模拟了一条最多有30个车站的火车线路,因此该模型有30个可为空的字段 型号.py 类模板(models.Model): 拾取模式=models.IntegerField(默认值=1) start_station=models.CharField(最大长度=2000) end_station=models.CharField(最大长度=2000,null=True) station_1=models.CharField(最大长度=2000,null=True) station_2=
类模板(models.Model):
拾取模式=models.IntegerField(默认值=1)
start_station=models.CharField(最大长度=2000)
end_station=models.CharField(最大长度=2000,null=True)
station_1=models.CharField(最大长度=2000,null=True)
station_2=models.CharField(最大长度=2000,null=True)
station_3=models.CharField(最大长度=2000,null=True)
station_4=models.CharField(最大长度=2000,null=True)
station_5=models.CharField(最大长度=2000,null=True)
station_6=models.CharField(最大长度=2000,null=True)
station_7=models.CharField(最大长度=2000,null=True)
station_8=models.CharField(最大长度=2000,null=True)
station_9=models.CharField(最大长度=2000,null=True)
station_10=models.CharField(最大长度=2000,null=True)
station_11=models.CharField(最大长度=2000,null=True)
station_12=models.CharField(最大长度=2000,null=True)
station_13=models.CharField(最大长度=2000,null=True)
station_14=models.CharField(最大长度=2000,空值=True)
station_15=models.CharField(最大长度=2000,null=True)
station_16=models.CharField(最大长度=2000,空值=True)
station_17=models.CharField(最大长度=2000,null=True)
station_18=models.CharField(最大长度=2000,null=True)
station_19=models.CharField(最大长度=2000,null=True)
station_21=models.CharField(最大长度=2000,null=True)
station_22=models.CharField(最大长度=2000,空值=True)
station_23=models.CharField(最大长度=2000,null=True)
station_24=models.CharField(最大长度=2000,空值=True)
station_25=models.CharField(最大长度=2000,空值=True)
station_26=models.CharField(最大长度=2000,空值=True)
station_27=models.CharField(最大长度=2000,空值=True)
station_28=models.CharField(最大长度=2000,空值=True)
station_29=models.CharField(最大长度=2000,null=True)
station_30=models.CharField(最大长度=2000,null=True)
正在使用ajax请求逐个添加数据
因此,我必须循环遍历从station_1
开始的所有字段。。如果不是。。去买下一个吧
下面是我如何尝试的:
def添加在线站点(请求):
inLine\u station=request.GET.GET('inLine\u stations',None)
obj=TempLine.objects.filter()[0]
对于对象中的f.\u meta.get\u字段[3:]:
如果f为无:
f=线路内车站
f、 保存()
其他:
通过
返回一个错误
TypeError:“method”对象不可下标
您应该创建一个站点模型。虽然现在你只需要车站的名称,但它很快就会发展成需要一个位置、开放时间等
一旦你建立了这样一个模型(即使它当时只有一个字段和一个名称),就与你的行建立多对多关系,并以与任何其他相关模型字段相同的方式访问它们
作为一般编程规则,如果要命名变量,则需要重新考虑是否需要将这些对象存储在某种类型的集合中,您应该创建站点模型。虽然现在你只需要车站的名称,但它很快就会发展成需要一个位置、开放时间等 一旦你建立了这样一个模型(即使它当时只有一个字段和一个名称),就与你的行建立多对多关系,并以与任何其他相关模型字段相同的方式访问它们 作为一般编程规则,如果要命名变量
variable\u n
,则需要重新考虑是否需要将这些对象存储在某种类型的集合中。首先,错误:。\u meta.get\u fields
是一个方法,而不是一个属性;因此,您需要:
for f in obj._meta.get_fields()[3:]:
# Note the call: ^^
现在,您的设计似乎不正确。您所做的基本上是调用与站点
模型的关系。因此,创建一个站点
模型,例如使用包含站点名称的名称
字段(以及其他需要的字段)。还要确保清楚地考虑与行模型的关系;乍一看,它对我来说就像是一个多对多。首先错误:\u meta.get\u fields
是一个方法,而不是一个属性;因此,您需要:
for f in obj._meta.get_fields()[3:]:
# Note the call: ^^
现在,您的设计似乎不正确。您所做的基本上是调用与站点
模型的关系。因此,创建一个站点
模型,例如使用包含站点名称的名称
字段(以及其他需要的字段)。还要确保清楚地考虑与行模型的关系;乍一看,我觉得这是一个多对多的过程