django - 如何在 Django 表单中仅加载活动数据
问题描述
我有一个由 ForeignKey 引用到我的个人资料的模型。在注册期间,我想加载这个仅处于活动状态的模型。
我的个人资料模型:
residence_status = models.ForeignKey("residencestatus.ResidenceStatus", verbose_name="ResidenceStatus", related_name="Profile", on_delete=models.CASCADE)
我的居留身份模型:
is_active = models.BooleanField(default=False, null=False)
创建一个单独的py文件来获取居住状态并作为对象返回(因为有很多这样的模型)
def get_residence_status():
resObjs = ResidenceStatus.objects.all().filter(is_active=True)
return resObjs
然后在我的表格上,将其全部加载到选项中:
class ProfileForm(forms.ModelForm):
class Meta:
model = Profile
fields = "__all__"
def __init__(self, *args, **kwargs):
RESIDENCE_STATUS_CHOICE = {}
resObj = get_residence_status()
for x in resObj:
print(x)
RESIDENCE_STATUS_CHOICE['id'] = x
super().__init__(*args, **kwargs)
self.fields['residence_status'] = forms.ChoiceField(choices=RESIDENCE_STATUS_CHOICE)
在我的终端上,如果 print(x) 和 print(RESIDENCE_STATUS_CHOICES) 的结果如下:
特になし
{'id': <ResidenceStatus: 特になし>}
特定技能外国人
{'id': <ResidenceStatus: 特定技能外国人>}
'高度人材
{'id': <ResidenceStatus: '高度人材>}
その他
{'id': <ResidenceStatus: その他>}
但是,我的模板(选择)的回报只是“d”
解决方案
选择接受包含('key', 'value')
但您将 dict 传递给它的元组列表。
def __init__(self, *args, **kwargs):
RESIDENCE_STATUS_CHOICE = [] # use list
resObj = get_residence_status()
for i, x in enumerate(resObj):
print(x)
RESIDENCE_STATUS_CHOICE.append(tuple([i+1, x]))
super().__init__(*args, **kwargs)
self.fields['residence_status'] = forms.ChoiceField(choices=RESIDENCE_STATUS_CHOICE)
推荐阅读
- go - GOPATH 使用 dep 包复制带下划线的路径
- html - Outlook 上未显示 HTM 电子邮件背景图像
- python - python - 跨方法和类传递变量
- javascript - 在循环内按按钮创建多个元素(输入)
- list - 一个 Haskell 函数,它接受两个字符串并根据第一个过滤第二个
- python - 强制 pytest.main() 使用不同的 pytest.ini
- deployment - 在生产和版本控制同步问题中运行 Strapi
- macos - 终端无法在带有 OSX 的 Aptana IDE 中工作
- javascript - 传递、接收和使用函数到子组件中
- c# - C# 是否支持嵌套的强类型树结构?