2015-02-07 67 views
0

我使用CreateView和UpdateView來管理保存和更新。在我的數據保存之前,我需要將3個表單字段合併到一個字段中,以將其存儲在我的模型中。基本上,我將經度,緯度和範圍轉換爲存儲在數據庫中的單個值。在我的ModelForm我創造我需要額外的領域和刪除一個領域,我不:在向用戶呈現之前修改UpdateView表單數據

class FilterForm(ModelForm): 
    lat = forms.FloatField() 
    lgt = forms.FloatField() 
    range = forms.FloatField() 

    class Meta: 
     model = AdFilter 
     fields = ['title', 'tags', 'start_date', 'end_date', 'start_time', 'end_time', 'week_days', 'ad'] 

要創建新的我實現form_valid()以結合經度,緯度和範圍和存儲它在我的模型中正確:

class FilterCreate(CreateView): 
    form_class = FilterForm 
    template_name = 'filter_form.html' 

    @method_decorator(login_required) 
    def dispatch(self, *args, **kwargs): 
     return super(FilterCreate, self).dispatch(*args, **kwargs) 

    def form_valid(self, form): 
     new_filter = form.save(commit=False) 
     new_filter.creator = self.request.user 

     utm_coordinates = utm.from_latlon(float(form.data['lat']), float(form.data['lgt'])) 
     center = geos.Point(utm_coordinates[0], utm_coordinates[1]) 
     broadcast_area_geometry = center.buffer(float(form.data['range'])) 

     # Set the right SRID 
     utm_epsg = int('326' + str(utm_coordinates[2])) 
     broadcast_area_geometry.srid = utm_epsg 

     new_filter.filter_geometry = broadcast_area_geometry 
     new_filter.save() 

     return super(FilterCreate, self).form_valid(new_filter) 

這一切工作正常。現在,我正試圖在UpdateView中做與form_valid()相反的情況,以便在有人獲得表單時使用。所以我需要從我的單個模型值開始,創建經度,緯度和距離值。我試圖在get_context_data()中做這個,但我只能弄清楚如何添加字段,而不是如何修改現有的字段。

這似乎是一個非常普遍的問題,但我似乎無法找到如何實現這個例子。也許我在找錯地方。

回答

1

您可能想覆蓋get_initial方法以提供默認值。該方法應該返回一個字典映射字段名稱到它們的默認值。

相關問題