gpt4 book ai didi

django - 如何在 Django 模型字段上设置任意属性,然后在 ModelForm 中访问它们?

转载 作者:行者123 更新时间:2023-12-01 05:43:24 25 4
gpt4 key购买 nike

Django 做什么

Django 的模型字段“空白”属性,以及当您创建模型表单时它被否定并变成表单字段“必需”属性的方式非常酷。它允许我在它所属的模型上设置属性,但在处理从它创建的 ModelForm 时具有可用的“必需”属性。在模板中渲染时使用“必需”意味着我可以做一些很酷的事情,比如在必填字段的显示标签上添加一个星号。

模型

class Employee(models.Model):
name = models.CharField(blank=False)
public_bio = models.TextField(blank=False)
salary= models.DecimalField(max_digits=15, decimal_places=2, blank=False)
personnel_notes = models.TextField(blank=True)

模板(使用 ModelForm)
{% for field in form %}
<p>
{{ field.label }}{% if field.required %}*{% endif %}
{{ field }}
</p>
{% endfor %}

我想要它做什么

但是如果我想用我自己的新属性来做到这一点呢?它不需要像空白-> 必需那样被否定/翻译,但我希望在模型字段上定义的新属性可以在我的表单字段上访问。例如,假设我想向用户明确可能会发布哪些字段:

模型
class Employee(models.Model):
name = models.CharField(blank=False, publishable=True)
public_bio = models.TextField(blank=False, publishable=True)
salary= models.DecimalField(max_digits=15, decimal_places=2, blank=False, publishable=False)
personnel_notes = models.TextField(blank=True, publishable=False)

模板(使用 ModelForm)
{% for field in form %}
<p>
{{ field.label }}{% if field.required %}*{% endif %}
{% if field.publishable %}(may be published){% endif %}
{{ field }}
</p>
{% endfor %}

有没有办法做到这一点?尝试一下,我立即遇到了模型定义的问题,其中 django.db.models.fields.Field.__init__()甚至不接受 kwargs。如果这是不可能的,有什么解决方法可以获得所需行为的想法吗?

最佳答案

请注意,可发布应该是 forms.Field 上的属性,而不是 models.Field 上的属性,以便它出现在模板中。

您可以在表单启动时将其显式添加到您希望可发布的字段上,并且在呈现时您可以使用它:

class PublishableForm(forms.Form):
name = forms.CharField()

def __init__(*args, **kwargs)
super(PublishableForm, self).__init__(*args, **kwargs)
self.name.publishable = True

关于django - 如何在 Django 模型字段上设置任意属性,然后在 ModelForm 中访问它们?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3898967/

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