2015-09-28 31 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

相关问题