Python / Django Beginner - PullRequest
       6

Python / Django Beginner

0 голосов
/ 16 марта 2012

Я новичок в веб-разработке, получаю:

Ошибка целостности в / map / rebuild /

Нулевое значение в столбце "snow_Depth" нарушает ненулевое ограничение

Вы видите что-то, что я делаю неправильно в этой функции? Мои ходы незаконны?

imports.py:

1 from django.contrib.gis.geos import Point
2 from models import *
3 from apps.pages.models import *
4 from decimal import *
5 from datetime import *
6 import string
7 
8 def add_points():
9     response = ""
10     all_data_entries = DataEntry.objects.all()
11     point_layers = PointLayer.objects.all()
12 
13     PointLayer.objects.all().delete()
14     size = 1
15 
16     for this_data_entry  in all_data_entries:
17         point_layer = point_layers.create( pk=size )
18         point_layer.albedo = this_data_entry.albedo
19         point_layer.snow_Density = this_data_entry.snow_density
20         point_layer.snow_Depth = this_data_entry.snow_Depth
21 
22         ret = this_data_entry.station_Number
23 
24         if ret == "CH15":
25             point_layer.lat = 43.067657
26             point_layer.lon = 72.218724
27         if ret == "SL8":
28             point_layer.lat = 43.420129
29             point_layer.lon = 72.09098
30         if ret == "RC13":
31             point_layer.lat = 43.0159
32             point_layer.lon = 70.8272
33         if ret == "GR4":
34             point_layer.lat = 44.1467
35             point_layer.lon = 71.965
36         if ret == "CS7":
37             point_layer.lat = 44.49611
38             point_layer.lon = 71.57639
39         if ret == "MR11":
40             point_layer.lat = 43.284896
41             point_layer.lon = 71.92525
42         if ret == "CS11":
43             point_layer.lat = 44.373681
44             point_layer.lon = 71.613242
45         if ret == "MR4":
46             point_layer.lat = 43.149944
47             point_layer.lon = 71.556467
48         if ret == "GR11":
49             point_layer.lat = 43.760317
50             point_layer.lon = 71.688856
51         if ret == "CR1":
52             point_layer.lat = 43.6037
53             point_layer.lon = 70.9867
54         if ret == "ST21":
55             point_layer.lat = 43.2356
56             point_layer.lon = 71.082296
57         if ret == "HL25":
58             point_layer.lat = 42.914089
59             point_layer.lon = 71.610217
60         if ret == "MR6":
61             point_layer.lat = 43.52
62             point_layer.lon = 71.819
63         if ret == "RC29":
64             point_layer.lat = 42.9007
65             point_layer.lon = 71.192591
66         if ret == "CH4":
67             point_layer.lat = 42.9395
68             point_layer.lon = 72.3284
69         if ret == "CR7":
70             point_layer.lat = 43.929483
71             point_layer.lon = 71.084079
72         if ret == "CS10":
73             point_layer.lat = 44.388238
74             point_layer.lon = 71.269535
75         if ret == "HL48":
76             point_layer.lat = 42.776745
77             point_layer.lon = 71.77992
78         point_layer.site = ret
79         point_layer.geometry = Point( float( point_layer.lon ), float (point_layer.lat ) )
80         size += 1
81         point_layer.get( pk=1 ).save( commit = False )

views.py

1 from django.http import HttpResponse, HttpResponseRedirect
2 from django.shortcuts import render_to_response
3 from django.template import RequestContext
4 from models import *
5 from apps.pages.models import DataEntry
6 
7 def map( request ):
8     return render_to_response('map/map.html',{},context_instance=RequestContext(request))
9 
10 def rebuild( request ):
11     import imports
12     imports.add_points()
13     return HttpResponseRedirect( '/map/' )
14 
15 def all( request ):
16     points = PointLayer.objects.all(a).kml()
17     return render_to_response("kml/main.kml", {
18         'geometries': points
19     }, context_instance=RequestContext( request ))

Заранее спасибо

1 Ответ

1 голос
/ 16 марта 2012

Я не уверен, что вы пытаетесь сделать, но ваша немедленная ошибка от этой строки:

point_layer = point_layers.create( pk=size )

Когда вы используете create, вам нужно убедиться, что все необходимые поля для модели переданы в метод, поскольку он создает и сохраняет объект.

Поскольку вы не передаете обязательное поле snow_Depth,происходит сбой при попытке сохранить.

Вы можете либо передать все обязательные поля в create, либо установить их вручную, а затем сохранить объект:

point_layer = PointLayer()
point_layer.pk = size
# .. other various fields
# Replace point_layer.get( pk=1 ).save( commit = False ) with:
point_layer.save()

Вышеприведенное решение решает вашу проблему, но ...

Я думаю, что вы, возможно, пытаетесь обновить некоторые PointLayer объекты - с вашей последней строки point_layer.get( pk=1 ).save( commit = False )

Если это так, то вы действительно хотите заменить:

point_layer = point_layers.create( pk=size ) с:

point_layer = PointLayer.objects.get(pk=size)

Однако, поскольку вы удалили все объекты с этой строкой PointLayer.objects.all().delete(), возможно, этоне тот случай.

Уточните, что вы собираетесь делать.

...