遍历 Django 模型中的字段 class
Loop through fields in Django model class
我试图消除我的 models.py 文件中的重复代码,但以下循环不起作用并且 returns "OperationalError no such column my_app.rank."
from django.db import models
rank_fields = [
'E1', 'E2','E3', 'E4', 'E5', 'E6', 'E7', 'E8', 'E9',
'W1', 'W2', 'W3', 'W4', 'W5', 'O1E', 'O2E', 'O3E', 'O1',
'O2', 'O3', 'O4', 'O5', 'O6', 'O7', 'O8', 'O9', 'O10'
]
class withDependents(models.Model):
MHA = models.CharField(max_length = 5)
for rank in rank_fields:
rank = models.DecimalField(max_digits = 10, decimal_places = 2)
编辑:
我找到了一种可行的解决方案:
# add rank fields to withDependents and withOutDependents
rank_fields = [
'E1', 'E2','E3', 'E4', 'E5', 'E6', 'E7', 'E8', 'E9',
'W1', 'W2', 'W3', 'W4', 'W5', 'O1E', 'O2E', 'O3E', 'O1',
'O2', 'O3', 'O4', 'O5', 'O6', 'O7', 'O8', 'O9', 'O10'
]
for rank in rank_fields:
withDependents.add_to_class(rank, models.DecimalField(max_digits = 10, decimal_places = 2))
withOutDependents.add_to_class(rank, models.DecimalField(max_digits = 10, decimal_places = 2))
方法是在class_prepared上使用contribute_to_class字段方法:
from django.db.models import DecimalField
from django.db.models.signals import class_prepared
def add_fields(sender, **kwargs):
if sender.__name__ == "withDependents":
for rank in rank_fields:
field = DecimalField(max_digits = 10, decimal_places = 2)
field.contribute_to_class(sender, rank)
class_prepared.connect(add_fields)
我试图消除我的 models.py 文件中的重复代码,但以下循环不起作用并且 returns "OperationalError no such column my_app.rank."
from django.db import models
rank_fields = [
'E1', 'E2','E3', 'E4', 'E5', 'E6', 'E7', 'E8', 'E9',
'W1', 'W2', 'W3', 'W4', 'W5', 'O1E', 'O2E', 'O3E', 'O1',
'O2', 'O3', 'O4', 'O5', 'O6', 'O7', 'O8', 'O9', 'O10'
]
class withDependents(models.Model):
MHA = models.CharField(max_length = 5)
for rank in rank_fields:
rank = models.DecimalField(max_digits = 10, decimal_places = 2)
编辑:
我找到了一种可行的解决方案:
# add rank fields to withDependents and withOutDependents
rank_fields = [
'E1', 'E2','E3', 'E4', 'E5', 'E6', 'E7', 'E8', 'E9',
'W1', 'W2', 'W3', 'W4', 'W5', 'O1E', 'O2E', 'O3E', 'O1',
'O2', 'O3', 'O4', 'O5', 'O6', 'O7', 'O8', 'O9', 'O10'
]
for rank in rank_fields:
withDependents.add_to_class(rank, models.DecimalField(max_digits = 10, decimal_places = 2))
withOutDependents.add_to_class(rank, models.DecimalField(max_digits = 10, decimal_places = 2))
方法是在class_prepared上使用contribute_to_class字段方法:
from django.db.models import DecimalField
from django.db.models.signals import class_prepared
def add_fields(sender, **kwargs):
if sender.__name__ == "withDependents":
for rank in rank_fields:
field = DecimalField(max_digits = 10, decimal_places = 2)
field.contribute_to_class(sender, rank)
class_prepared.connect(add_fields)