2013-05-28 22 views
0

我在models.py(只是一個子集)Django的模型參考和數據更新/插入

class arctic_seasons(models.Model): 
    season_id = models.AutoField(primary_key=True) 
    season_name = models.CharField(max_length=20) 
    description = models.CharField(max_length=20) 

    def __unicode__(self): 
     return self.season_name 

class antarctic_seasons(models.Model): 
    season_id = models.AutoField(primary_key=True) 
    season_name = models.CharField(max_length=20) 
    description = models.CharField(max_length=20) 

    def __unicode__(self): 
     return self.season_name 

通告所界定某些型號,這些表之間的唯一差別是前綴arctic_antarctic_

我定義將基本解碼一些GeoJSON的數據,並將其插入到基於模型的數據庫的視圖。

以GeoJSON有一個字符串參數「季節」將識別模型(表)中的數據應當被插入。

例如說,我們結束了這些變量(從GeoJSON的拉動POST收集)

season = data['properties']['season'] 
location = data['properties']['location'] 

如果季節=「2011_Greenland_P3」位置=「極寒」認爲應該插入一個新的季節與SEASON_NAME arctic_seasons = '2011_Greenland_P3'

本質上講,它應該做的」

s = arctic_seasons(name=season); 
s.save() 

我的問題是,我該如何編寫一個可以處理可變位置前綴的代碼。如果位置是「南極洲」,則聲明將變爲:

s = antarctic_seasons(name=season); 
s.save() 

但是,我顯然不希望重複所有這些代碼。我怎樣才能做到這一點?

回答

1

您只需更新您的模型

LOCATION = (('Arctic', 'Arctic'), ('Antarctic', 'Antarctic')) 

class Season(models.Model): 
    season_id = models.AutoField(primary_key=True) 
    season_name = models.CharField(max_length=20) 
    description = models.CharField(max_length=20) 
    location = models.CharField(choices=LOCATION) 

    def __unicode__(self): 
     return "%s-%s"%(self.location, self.season_name) 

,並通過在適當的參數。

s = arctic_seasons(name=season, location='Arctic'); 
s.save() 
+0

謝謝,我想這應該工作了。它在我的系統設計中需要一點邏輯改變,但我認爲它會更好。幾個簡單的問題。 1.什麼是ChoiceField存儲在數據庫中? 2.你可以根據位置進行查詢。說「選擇*從季節哪裏位置='北極';」 –

+0

你可以做一些不同的事情。虐待更新模型 - 是的,你可以按照你提到的方式來查詢它。此外,現在它是一個簡單的charfield – karthikr