2010-11-03 33 views
5

Tôi có mô hình này Django:GeoDjango & MySQL: điểm không thể là NULL, giá trị "trống" khác nào tôi nên sử dụng?

from django.contrib.gis.db import models 

class Event(models.Model): 
    address = models.TextField() 
    point = models.PointField('coordinates', null=True, blank=True) 

Khi tôi đồng bộ mô hình này sử dụng MySQL, thông báo lỗi này được in trong khi tạo ra các chỉ số:

Failed to install index for events.Event model: (1252, 'All parts of a SPATIAL index must be NOT NULL') 

như vậy, không có khả năng sử dụng null=True (cho rằng Tôi muốn có chỉ mục đó), tôi có khả năng nào khác? Tôi có thể xác định điểm (0,0) là "trống rỗng", nhưng sau đó tôi phải nhớ rằng quy ước ở mọi nơi tôi dự định sử dụng dữ liệu, nếu không thì sẽ có rất nhiều sự kiện diễn ra ở Tây Đại Tây Dương Châu Phi ...

Có khả năng nào khác?

Trả lời

1

Tôi không nghĩ bạn có nhiều tùy chọn ở đây. Hoặc bạn sử dụng trình giữ chỗ như (0, 0) hoặc bạn đóng gói điểm trong đối tượng và tham chiếu đối tượng ở mọi nơi bạn cần. Bằng cách đó, tham chiếu đến đối tượng có thể được thực hiện nullable, nhưng việc tham gia thêm sẽ làm tổn thương hiệu suất và làm phức tạp mọi thứ.

0

Một ý tưởng nhanh sẽ là có trường boolean khác mà bạn đánh dấu là đúng/sai khi bạn có điểm thực. Nó sẽ làm cho việc truy vấn dễ dàng vì bạn có thể thêm trường boolean vào mệnh đề where.

class Event(models.Model): 
    ... 
    has_point = models.BooleanField(default=False) 
    point = models.PointField('coordinates', ...) 

Event.objects.filter(has_point=True)...#whatever else you need when handling location 
0

Tôi vừa gặp vấn đề tương tự. Đối với tôi, tôi cần xác định để không tạo ra một spatial_index. Vì vậy, mô hình của bạn sẽ thay đổi thành:

from django.contrib.gis.db import models 

class Event(models.Model): 
    address = models.TextField() 
    point = models.PointField('coordinates', null=True, blank=True, spatial_index=False) 
Các vấn đề liên quan