2014-01-07 95 views
3

是否有將元組保存到django模型的方法?將元組保存爲django模型

例如:

Class User(models.Model): 
    location = models.tupleField() 

其中User.location = (longitude, latitude)

+2

你認爲在DB中的表示是什麼?即什麼數據類型? – shx2

+0

我不確定我的選擇,可以請給我一個提示。 – mabdrabo

+0

我不知道一個。您可以創建一個自定義字段,在讀/寫時將元組從/轉換爲單個值(例如其字符串表示形式),或者使用兩個字段/數據庫列。 – shx2

回答

8

也許你正在尋找GeoDjango's PointField

from django.contrib.gis.db import models 

Class User(models.Model): 
    location = models.PointField(help_text="Represented as (longitude, latitude)」) 
4

老實說,我沒有看到tupleField Django的文檔。我認爲更好的辦法是增加兩個字段 longitudelatitude或創建另一個模型來存儲位置和在User模型添加ForeignKey

+0

我已經使用兩個字段的方法,但我認爲如果這樣的事情存在,它會讓我在我的模型中有很多字段,ForeignKey解決方案將佔用太多的空間,比需要的更多 – mabdrabo

0

如果你覺得有必要保存的元組在一個字段,你真的應該考慮的關係。這就是他們創建的原因。

老答案:

這個答案是假設你真正節省了位置。

如果您使用PostgreSQL,則可以使用PostGISMySQL和Oracle有內置的空間域。

Django已經支持地理數據。例如。 -

from django.contrib.gis.db import models 

class ModelName(models.Model): 
    centroid = models.GeometryField(blank=True, null=True) 

然後你就可以做出各種地理查詢(e.g看到的是一個指定區域內的地方,通過距離等排序)和你的DBMS會照顧他們。另外從單場,你可以訪問你的數據,如 -

lat, long = [modelobject.centroid.x, modelobject.centroid.y] 
# Or you can just use .x or .y directly 

您可以在Geodjango documentation閱讀更多關於他們。

+0

事情是它不僅僅是位置,在事實上大多數情況下,他們是字符串 – mabdrabo

+0

對不起,那麼這個答案沒有任何用處。在字符串的情況下,如果您覺得需要在單個字段中保存多個值,則需要深入研究關係。在第一種數據庫規範化形式的單個字段中沒有多個值。 https://en.wikipedia.org/wiki/First_normal_form –