2011-02-17 155 views
7

在我model.pyDjango的保存模型ForeignKey的關係

class Layer(models.Model): 
    user = models.IntegerField() 
    name = models 
    ... 

class Point(models.Model): 
    layers = models.ForeignKey(Layer) 
    meta = models.TextField() 
    ... 

在我view.py

def datasave(request, id): 
    mid = request.POST.get("layerid",default = "") 
    metas = request.POST.get("meta",default = "") 

    cs = Point() 
    cs.layers = mid 
    cs.meta = metas 
    cs.save() 

,但它在我的Django debug..in項目中,我使用GeoDjango內置給出了一個錯誤,的OpenLayers和ExtJS的...我沒有找到任何節能的解決方案我的帖子

我沒有做任何的關係與我的外鍵..基本上我想做出比當i層想要在我的圖層中添加一個點,我想用圖層ID保存我的點...。

回答

8

發佈回溯信息有助於理解您的問題(以便將來的問題)。

它看起來像你對我傳遞一個號碼給您Point實例的屬性layers這將導致ValueError。唯一的地方,你可以傳遞一個數字到一個外鍵字段是以django形式爲你查找的。

您需要改爲指定實際的Layer實例。

cs = Point() 
cs.layers = Layer.objects.get(id=mid) 
cs.meta = metas 
cs.save() 
+0

THKS對你有所幫助,但是當我做您的解決方案這給了「featureadd()究竟需要兩個參數(1給出)」我怎樣才能解決這個問題? – aragon 2011-02-17 15:35:28

+0

我的1行更改不會導致該錯誤。儘管你可以發佈追蹤以獲得進一步的幫助! – 2011-02-17 15:50:46

13

一種更有效的方式是通過添加「_id」來指定外鍵底,這樣的:

cs = Point(layers_id = mid, meta = metas) 
cs.save() 

不做層= XXX.objects.get(ID = ###)因爲這是數據庫查詢數量的兩倍。

ALSO ...你並沒有清理你的POST數據,這很危險。取得這樣的:

from django import forms 
id_field = forms.IntegerField() 
layer_id = id_field.clean(request.POST.get("layerId", "")