gpt4 book ai didi

python - 使用 django cleaned data pop 在提交到 db 之前删除数据

转载 作者:太空宇宙 更新时间:2023-11-03 11:01:46 25 4
gpt4 key购买 nike

我有一个带有选择列表的表单。

当用户从 award_grant_type 选择列表中选择值 8888 或 9999 时,我想要表单输入字段中可能存在或不存在的一些数据(用户可能已经输入数据进入表单文本输入字段,然后选择 8888 或 9999) 在表单数据提交到数据库之前删除。

所以我有以下 model.py 代码:

.....
DISPLAY_ONLY_AWARD_AND_GRANT_DESCRIPTION_WITH_PROMPT = 8888
DISPLAY_ONLY_AWARD_AND_GRANT_DESCRIPTION_WITHOUT_PROMPT = 9999
.....

AWARD_GRANT_TYPES = (
(SELECT_AWARD_AND_GRANT_TYPE, _('Select Type')),
(AWARD, _('Award')),
(GRANT, _('Grant')),
(TRAVEL_GRANT, _('Travel Grant')),
(OTHER_AWARD, _('Other Award')),
(OTHER_GRANT, _('Other Grant')),
(WRITE_MY_OWN_AWARD_AND_GRANT_TYPE_DESCRIPTION, _('Write my own Type description')), #7777
(DISPLAY_ONLY_AWARD_AND_GRANT_DESCRIPTION_WITH_PROMPT, _('Display only Description with prompt')), #8888
(DISPLAY_ONLY_AWARD_AND_GRANT_DESCRIPTION_WITHOUT_PROMPT, _('Display only Description without prompt')) #9999
)

user = models.ForeignKey(User)
language_version = models.ForeignKey('LanguageVersion')
award_grant_type = models.PositiveIntegerField(choices=AWARD_GRANT_TYPES, default=SELECT_AWARD_AND_GRANT_TYPE, validators=[MinValueValidator(1)])
award_grant_type_description = models.CharField(null=True, blank=True, max_length=250)
award_grant_date = models.DateField(null=True, blank=True)
award_grant_description = models.TextField(null=False, blank=False, max_length=5000)

这是我的 forms.py 干净代码,当用户从选择列表 award_grant_type< 中选择 8888 或 9999 时,应该删除 award_grant_type_descriptionaward_grant_date 字段 在提交给数据库之前:

def clean(self):

cd_agdf = super(AwardGrantDetailsForm, self).clean()

if 'award_grant_type' in cd_agdf:
if cd_agdf['award_grant_type'] == '':
self._errors['award_grant_type'] = self.error_class([_("You must select a Type.")])

elif cd_agdf['award_grant_type'] == 8888 or cd_agdf['award_grant_type'] == 9999:
# remove the entered values when the award grant type only requires minimum data.
self.cleaned_data.pop('award_grant_type_description', None)
self.cleaned_data.pop('award_grant_date', None)
else:
....
return cd_agdf

谁能指出我做错了什么? award_grant_type_descriptionaward_grant_date 在表单数据提交到数据库之前没有被删除.

编辑/更新

此问题仅在更新现有记录时发生。在将表单保存到数据库之前,新记录会根据需要删除数据。当现有记录将日期字段作为数据库记录的一部分并且 award_grant_type 从 1 更改为 8888 或 9999 时,award_grant_date 不会从数据库中删除.我不明白为什么。

第二次编辑

我已经发布了一个相关主题 here .

最佳答案

尝试将self.cleaned_data更改为cd_agdfclean 方法返回的字典将用作 cleaned_data。您从 self.cleaned_data 中弹出项目,但返回未更改的 cd_ahdf。这是描述here (请参阅以“表单的子类...”开头的最后一步)。

关于python - 使用 django cleaned data pop 在提交到 db 之前删除数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31134274/

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