gpt4 book ai didi

Django - 表单 - 自动填充和隐藏外键字段

转载 作者:行者123 更新时间:2023-12-02 03:32:05 25 4
gpt4 key购买 nike

我有 models.pyforms.py ,如下所示:

class BHA_overall(models.Model):
bha_number = models.ForeignKey(BHA_List, 'CASCADE', related_name='bha_overall')
drill_str_name = models.CharField(max_length=111)
depth_in = models.CharField(max_length=111)
depth_out = models.CharField(max_length=111)


class BHA_overall_Form(forms.ModelForm):
class Meta():
model = BHA_overall
fields = '__all__'

在我的模板中,如果我只使用:

<form method="POST">
{% csrf_token %}
{{ form.as_p }}
<button name='action' value='login' type="submit">Sign in</button>
</form>

外键字段 bha_number 显示为组合框,我可以在其中选择它所属的特定 bha_number 模型实例,如下所示:

enter image description here

在这里,我想从用户端删除 Bha number 字段,然后让我的代码自动为用户填充该字段,然后隐藏它。所以从用户端来说,只会显示3个字段。我怎样才能做到这一点?

目前我正在实现这个 html 代码:

<form id="demo-form" data-parsley-validate="" novalidate="" method="POST">
<div class="row">
{% csrf_token %}
{% for field in form %}
<div class="col-lg-2 col-md-2 col-sm-4 col-xs-6" style="margin-bottom: 5px">
<label class="input-upper-title">{{ field.name }}</label>
<input type="text" id="" class="form-control input-field-height-vertical" name="" data-parsley-trigger="" required="">
</div>
{% endfor %}
<input type="submit" class='btn btn-primary' value="Submit">
</div>
</form>

它呈现出这样的效果:

enter image description here

我希望第一个字段 bha_number 从用户端消失,但系统仍然需要获取该信息以保存到正确的模型实例。因此,我正在寻找一种在 forms.pyviews.py 级别自动填充此 ForeignKey 字段的方法。

这是我的views.py:

class BHA_UpdateView(UpdateView):
model = BHA_List
success_url = reverse_lazy('well_list') # this is wrong
form_class = BHA_overall_Form
def post(self, request, **kwargs):
api = get_well_api(self.request)
current_bha = BHA_List.objects.filter(id=get_current_bha_id(self.request))[0]
form = BHA_overall_Form(request.POST, instance=BHA_overall.objects.filter(bha_number__well__api=api, bha_number=current_bha)[0])
if form.is_valid():
form.save()
return super().post(request, **kwargs)

最佳答案

您可以使用排除来隐藏表单中的字段

Class BHA_overall_Form(forms.ModelForm):
class Meta():
model = BHA_overall
fields = '__all__'
exclude = ('bha_number',)

要在检查表单是否有效后自动填充,只需使用 form = form.cleaned_data 清理数据并将其存储在任何变量中。它只不过是一本字典。您可以为其赋值,例如 form['bha_number'] = your value 并使用 form.save() 将其保存到数据库。
或者您可以使用 object = form.save(commit=False) 因为此方法将返回一个对象。然后你可以做object.bha_number = your number最后反对。保存在下一行。就这样。选择您喜欢的任何解决方案。

关于Django - 表单 - 自动填充和隐藏外键字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51547441/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com