7

私が始めた新しい GeoDjango プロジェクトのテストを書いています。通常、私はFactory BoyFakerを使用して、テスト用のモデル インスタンスを作成しました。ただし、GeoDjango PointField フィールドをモックする方法は明確ではありません。Spacialiteでレコードを見ると、バイナリ ブロブとして表示されます。

私は 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?
4

4 に答える 4

11

ポイント インスタンスのカスタム ファジー アトリビュートを作成する必要があると思います。これを試すことができますか?今のところ、すべてを実行するためのセットアップがありません。

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
于 2015-09-28T20:19:51.460 に答える
0

値を直接設定することもできます。

import json

from factory import LazyAttribute
from factory.django import DjangoModelFactory


class PlaceFactory(DjangoModelFactory):
    static_location = "{'type': 'Point', 'coordinates': [1,1]}"
    random_location = LazyAttribute(lambda x: json.dumps({
        'type': 'Point',
        'coordinates': [random.uniform(-180.0, 180.0), random.uniform(-180.0, 180.0)]}
    ))
于 2021-02-23T10:07:49.793 に答える