重写CreateView上的Get_Initial时表单提交上的Django键错误

重写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

我有一个通用的CreateView,它用一些默认值及其父对象的主键值填充窗体。表单已正确填充,但在提交时,它会为lumberload\u id抛出一个键错误

调试表明,它会覆盖get和POST上的get_initial方法,这意味着它会尝试访问lumberload对象,该对象在提交表单时不再存在

在我看来,没有必要让_initial on post返回,因为它已经在get上完成了它的工作。有没有办法跳过在POST上覆盖get_首字母?我无法尝试将覆盖包装到:

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”周围而不是把它放在超控范围内。谢谢