django保存模型ForeignKey关系

时间:2011-02-17 15:10:58

标签: django foreign-keys

在我的model.py

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调试中出错。在我的项目中我使用geodjango,openlayers和extjs ...我没有找到关于保存帖子的任何解决方案

我与我的外键没有任何关系..基本上我想制作一个图层,而不是当我想在我的图层中添加一个点时,我想用图层ID保存我的观点....

2 个答案:

答案 0 :(得分:12)

更有效的方法是通过在末尾添加“_id”来指定外键,如下所示:

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

不要执行layers = XXX.objects.get(id = ###),因为这会使数据库查询的数量增加一倍。

另外......你不是在这里清理你的POST数据,这非常危险。得到它:

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

答案 1 :(得分:9)

发布追溯有助于了解您的问题(以后的问题)。

我认为您向Point实例的layers属性传递了一个数字,这会导致ValueError。您可以将数字传递给外键字段的唯一位置是django形式,它会为您执行查找。

您需要分配一个实际的Layer实例。

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