django保存模型ForeignKey关系

ara*_*gon 8 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()
    ...
Run Code Online (Sandbox Code Playgroud)

在我的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()
Run Code Online (Sandbox Code Playgroud)

但它在我的django调试中出错.在我的项目中我使用geodjango,openlayers和extjs ...我没有找到任何有关保存我的帖子的解决方案

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

hen*_*ski 13

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

cs = Point(layers_id = mid, meta = metas)
cs.save()
Run Code Online (Sandbox Code Playgroud)

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

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

from django import forms
id_field = forms.IntegerField()
layer_id = id_field.clean(request.POST.get("layerId", "")
Run Code Online (Sandbox Code Playgroud)


Yuj*_*ita 9

发布回溯以帮助理解您的问题(对于将来的问题)是有帮助的.

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

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

cs = Point()
cs.layers = Layer.objects.get(id=mid)
cs.meta = metas
cs.save()
Run Code Online (Sandbox Code Playgroud)