【发布时间】:2022-01-24 20:35:17
【问题描述】:
我想显示一个表单的所有元素,包括 pk,但我还没有找到令人满意的方法:
class SomeForm(forms.Form):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.fields["number"] = forms.IntegerField(required = True)
self.fields["id"] = forms.IntegerField(disabled = True)
self.fields["data"] = forms.CharField(required = False)
class Meta:
model = SomeModel
fields = ["id", "number", "data"]
所以现在我只需在视图中调用表单:
class SomeView(TemplateView):
template_name = "app/sometemplate.html"
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
obj = MODEL.objects.get(pk = context["pk"])
MODEL_data = {}
MODEL_data["number"] = obj.number
MODEL_data["id"] = obj.pk
MODEL_data["data"] = obj.data
context["form"] = SomeForm(initial = MODEL_data)
return context
现在在模板标签中我有一个过滤器get_pk:
@register.filter(name='get_pk')
def get_pk(obj):
return obj.initial["id"]
我在模板中使用{{ form|get_pk }} 得到pk,我觉得这并不聪明。我尝试了{{ form.instance.id }} 之类的东西,就像建议的here 一样。我仍然觉得必须有一个简单的方法来实现这一点?
【问题讨论】:
-
pk已经存在于上下文中,你使用它通过context["pk"]获取对象,使用那个{{ pk }}? -
编码不应该累。这是完全正确的。
标签: django django-forms django-templates