2013-12-14 3 views
0

У меня есть общий CreateView, который заполняет форму с некоторыми значениями по умолчанию вместе с значением первичного ключа его родительского объекта. Форма заполнена правильно, но при отправке она бросает KeyError для lumberload_id.Ошибка Django при отправке формы при переопределении Get_Initial в CreateView

Отладка показывает, что он переопределяет метод get_initial как для GET, так и для POST, что означает, что он пытается получить доступ к объекту lumberload, который больше не существует при отправке формы.

Мне кажется, что нет необходимости get_initial для почты, поскольку он выполнил свою работу в GET. Есть ли способ пропустить переопределение get_initial в POST? Я потерпел неудачу, пытаясь обертыванием переопределения:

if request.method == 'GET': 

URL:

url(r'^lumber_load/(?P<pk>\d+)/addlog/$', views.LogDataCreate.as_view(), name='log-data-add'), 

Вид: класса LogDataCreate (CreateView): form_class = LogDataForm модели = LogData

# Set created_by to the current user. 
    def form_valid(self, form): 
     form.instance.created_by = self.request.user 
     return super(LogDataCreate, self).form_valid(form) 

    # Set initial values of unit fields. 
    def get_initial(self): 
     return { 'lumberload': self.kwargs['lumberload_id'],'diameter_unit': '3', 'length_unit': '1' } 

    # Return to the load list when done creating a plot. 
    def get_success_url(self): 
     return reverse('geoapp:lumber_load_list') 

Модель:

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) 
+0

** Я также попытался: ** определение функции отправки (само, * ARGS ** kwargs): self.lumberLoad = get_object_or_404 (LumberLoad, pk = kwargs ['lumberload_id']) return 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'} ' – akthor

ответ

1

Попробуй так:

def get_initial(self): 
    if self.request.method == 'GET': 
     return #initial data 
    else: 
     return {} 
+0

Отлично, я попробовал обернуть тест для метода запроса вокруг« def get_initial (self) »вместо того, чтобы помещать его внутри переопределения. Благодаря!!!!!! – akthor

Смежные вопросы