2015-09-28 32 views
3

我正在爲我開始的一個新的GeoDjango項目編寫測試。通常我使用Factory BoyFaker來創建用於測試的模型實例。然而,我不清楚你如何模擬GeoDjango PointField字段。在查看Spacialite中的記錄時,它顯示爲二進制塊。使用Factory Boy和GeoDjango PointField

我完全不熟悉GIS的東西,並且對於如何在Django中爲PointFields創建工廠感到困惑。

# models.py 

from django.contrib.gis.db import models 

class Place(models.Model): 
    name = models.CharField(max_length=255) 
    location = models.PointField(blank=True, null=True) 

    objects = models.GeoManager() 

    def __str__(self): 
     return "%s" % self.name 
# factories.py 

import factory 
from faker import Factory as FakerFactory 
from . import models 

faker = FakerFactory.create() 

class PlaceFactory(factory.django.DjangoModelFactory): 
    class Meta: 
     model = models.Place 

    name = factory.LazyAttribute(lambda x: faker.name()) 
    #location = What do I do? 
+0

如果不固定在工廠的男孩,這結帳擴展模型,媽媽(現在我創建的測試記錄首選庫):這確實https://github.com/sigma-geosistemas/mommy_spatial_generators –

回答

5

我相信你需要創建一個點的實例自定義模糊屬性。你可以試試這個嗎?現在我沒有安裝程序來運行它。

import random 
from django.contrib.gis.geos import Point 
from factory.fuzzy import BaseFuzzyAttribute 

class FuzzyPoint(BaseFuzzyAttribute): 
    def fuzz(self): 
     return Point(random.uniform(-180.0, 180.0), 
        random.uniform(-90.0, 90.0)) 


class PlaceFactory(FakerFactory): 
    name = factory.LazyAttribute(lambda x: faker.name()) 
    location = FuzzyPoint() 
    class Meta: 
     model = models.Place 
+0

訣竅,謝謝! – Tom

相關問題