我正在尝试制作我的 date_modified
自从我通过后,字段被隐藏 datetime.now
定义参数 date_modified
模型中的字段。model.py
class Guide(models.Model):
name = models.CharField(max_length=50)
sno = models.CharField(max_length=50)
date_created = models.DateTimeField(default=datetime.now, blank=True)
date_modified = models.DateTimeField(default=datetime.now, blank=True)
def __unicode__(self):
return unicode(self.name)
views.py
class GuideFormUpdateView(UpdateView):
model = Guide
fields = ['name', 'sno', 'date_modified']
template_name_suffix = '_update_form'
success_url = reverse_lazy('Guides')
对应表格
forms.py
好像<form role="form" method="POST" action="{% url 'Guideform-edit' object.pk %}"
class="post-form form-horizontal" enctype="multipart/form-data">{% csrf_token %}
{{ form|crispy }}
<button type="submit" value="Upload" class="save btn btn-default btn-primary center-block">Update</button>
</form>
此表单显示
date_modified
field 。但是我不想在前端使用这个字段,而是希望模型或 db_table 中这个字段的值应该得到更新。我知道如何在 jquery 中隐藏这个特定字段,但我不想接触那些 js 工具。有什么办法可以制作crispy
排除该特定字段,如 {{ form|crispy|exclude:date_modified }}
..
最佳答案
而不是使用您的 UpdateView
的通用表单将隐式使用,创建您的自定义表单。并在您的自定义表单中更改 date_modified
的小部件 field 。
在你的 forms.py 中
from django.forms import ModelForm, HiddenInput
class GuideForm(ModelForm):
def __init__(self, *args, **kwargs):
super(GuideForm, self).__init__(*args, **kwargs)
self.fields['date_modified'].widget = HiddenInput()
class Meta:
fields = ('name', 'sno', 'date_modified', )
model = models.Guide
在你的 views.py 中
class GuideFormUpdateView(UpdateView):
model = Guide
form_class = forms.GuideForm
template_name_suffix = '_update_form'
success_url = reverse_lazy('Guides')
自动更新
date_modified
无论何时更新记录,都需要使用属性 auto_now
和 auto_now_add
而不是 default
.见 Docs .所以你的模型将是class Guide(models.Model):
name = models.CharField(max_length=50)
sno = models.CharField(max_length=50)
date_created = models.DateTimeField(auto_now_add=True, blank=True)
date_modified = models.DateTimeField(auto_now=True, blank=True)
def __unicode__(self):
return unicode(self.name)
关于python - 如何使django脆皮形式隐藏特定字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35270111/