GeoDjango 和混合器。“PointField”没有属性“_meta”

Igo*_*ato 3 python django unit-testing geodjango faker

我有一个Location模型(大致)定义如下:

from django.contrib.gis.db import models


class Location(models.Model):
    address = models.CharField(max_length=255)
    gis = models.PointField(null=True)
    name = models.CharField(max_length=255)
Run Code Online (Sandbox Code Playgroud)

每当我尝试时,mixer.blend('app.Location')我都会得到:

AttributeError: Mixer (app.Location): type object 'PointField' has no attribute '_meta'
Run Code Online (Sandbox Code Playgroud)

当我将它与设置为 None 或 Point 的字段混合时它可以工作,但我想知道是否有一种方法可以对其进行设置,以便它可以自行完成,特别是因为 faker 可以生成此数据。

Igo*_*ato 5

mixer.register允许您自定义数据的生成方式。在这种情况下

from django.contrib.gis.geos import Point


mixer.register(
    'app.Location',
    gis=lambda: Point(
        float(mixer.faker.latitude()),
        float(mixer.faker.longitude()),
    ),
)
Run Code Online (Sandbox Code Playgroud)

完成工作。