重写CreateView上的Get_Initial时表单提交上的Django键错误
我有一个通用的CreateView,它用一些默认值及其父对象的主键值填充窗体。表单已正确填充,但在提交时,它会为lumberload\u id抛出一个键错误 调试表明,它会覆盖get和POST上的get_initial方法,这意味着它会尝试访问lumberload对象,该对象在提交表单时不再存在 在我看来,没有必要让_initial on post返回,因为它已经在get上完成了它的工作。有没有办法跳过在POST上覆盖get_首字母?我无法尝试将覆盖包装到:重写CreateView上的Get_Initial时表单提交上的Django键错误,django,forms,Django,Forms,我有一个通用的CreateView,它用一些默认值及其父对象的主键值填充窗体。表单已正确填充,但在提交时,它会为lumberload\u id抛出一个键错误 调试表明,它会覆盖get和POST上的get_initial方法,这意味着它会尝试访问lumberload对象,该对象在提交表单时不再存在 在我看来,没有必要让_initial on post返回,因为它已经在get上完成了它的工作。有没有办法跳过在POST上覆盖get_首字母?我无法尝试将覆盖包装到: if request.method
if request.method == 'GET':
网址:
url(r'^lumber_load/(?P<pk>\d+)/addlog/$', views.LogDataCreate.as_view(), name='log-data-add'),
class LogData(models.Model):
logdata_id = models.AutoField(primary_key=True)
lumberload = models.ForeignKey('LumberLoad', blank=True, null=True)
butt_diameter = models.DecimalField(null=True, max_digits=4, decimal_places=1, blank=True)
diameter_unit = models.ForeignKey('UnitLengthType', related_name='diameter_unit', null=True)
log_length = models.DecimalField(null=True, max_digits=3, decimal_places=1, blank=True)
length_unit = models.ForeignKey('UnitLengthType', related_name='length_unit', null=True)
speciestreetype = models.ForeignKey('SpeciesTreeType', blank=True, null=True)
recorded_date = models.DateField(blank=True, null=True)
created_by = models.ForeignKey(User)
class Meta:
db_table = 'log_data'
ordering = ["logdata_id"]
def __unicode__(self):
return unicode(self.logdata_id)
型号:
url(r'^lumber_load/(?P<pk>\d+)/addlog/$', views.LogDataCreate.as_view(), name='log-data-add'),
class LogData(models.Model):
logdata_id = models.AutoField(primary_key=True)
lumberload = models.ForeignKey('LumberLoad', blank=True, null=True)
butt_diameter = models.DecimalField(null=True, max_digits=4, decimal_places=1, blank=True)
diameter_unit = models.ForeignKey('UnitLengthType', related_name='diameter_unit', null=True)
log_length = models.DecimalField(null=True, max_digits=3, decimal_places=1, blank=True)
length_unit = models.ForeignKey('UnitLengthType', related_name='length_unit', null=True)
speciestreetype = models.ForeignKey('SpeciesTreeType', blank=True, null=True)
recorded_date = models.DateField(blank=True, null=True)
created_by = models.ForeignKey(User)
class Meta:
db_table = 'log_data'
ordering = ["logdata_id"]
def __unicode__(self):
return unicode(self.logdata_id)
试着这样做:
def get_initial(self):
if self.request.method == 'GET':
return #initial data
else:
return {}
我还尝试过:
def dispatch(self,*args,**kwargs):self.lumberLoad=get_object_或_404(lumberLoad,pk=kwargs['lumberLoad_id'])返回super(LogDataCreate,self)。dispatch(*args,**kwargs)#设置单位字段的初始值。def get_initial(self):#return{'lumberload':self.kwargs['lumberload_id'],'diameter_unit':'3','length_unit':'1'}return{'lumberload':self.lumberload.lumberload_id,'diameter_unit:'3','length_unit:'1'}
非常好,我尝试过将请求方法的测试包装在“def get_initial(self”周围而不是把它放在超控范围内。谢谢