在将其插入表单之前,有没有办法修改从模型中获取的数据? 这是我的模特:
class SomeData(models.Model):
Some_No = models.ForeignKey('SomeDef', on_delete=models.PROTECT)
Some_Val = models.DecimalField(max_digits=10, decimal_places=3, verbose_name=_('Some_Val'))
这是我的表格:
@autostrip
class SomeForm(forms.ModelForm):
class Meta:
model = models.SomeData
fields = ('Some_Val', 'Some_No')
def __init__(self, *args, **kwargs):
super(SomeForm, self).__init__(*args, **kwargs)
self.fields['Some_No'].label = _(' ')
def clean_some(self):
some = None
some_id = self.cleaned_data['some']
some = models.SomeDef.objects.get(Some_No=some_id)
return some
def save(self, something, *args, **kwargs):
orig_commit = kwargs.get('commit', True)
kwargs['commit'] = False
ri = super(SomeForm, self).save(*args, **kwargs)
ri.Some_No = something
if orig_commit:
try:
ri.save()
except ValidationError as e:
raise ValidationError
return ri
模型内部保存的数据与我希望在表格填充数据时显示的数据略有不同。但是,我无法弄清楚如何以聪明的方式做到这一点。
答案 0 :(得分:0)
使用pre_save信号。 Signals
答案 1 :(得分:0)
您可以使用__init__
方法设置初始值:
def __init__(self, *args, **kwargs):
super(SomeForm, self).__init__(*args, **kwargs)
self.fields['Some_No'].initial = f(self.instance)
答案 2 :(得分:0)
当您将表单实例化到视图中时,可以将初始数据字典参数传递给表单。