Этот вопрос может показаться излишним, но я искал другие ответы, и они, похоже, не решили проблему.Я использую GeoDjango с DRF3.В моих моделях есть поле с именем location, значение которого задано как экземпляр Point, который принимает долготу и широту в качестве аргумента.
Поэтому в сериализаторе у меня есть два немодельных поля - широта и долгота.Однако, когда я печатаю validated_data
, lat и lng не десериализованы.
Обновление
Я удалил serialzerMethodField
для latitude
и longitude
и заменил ихс полем location
, как у меня в моих моделях.
models.py
class Site(models.Model):
site_id = models.UUIDField(default=uuid.uuid4, editable=False, primary_key=True)
owner = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE, related_name="site")
location = models.PointField(geography=True, null=True, blank=True)
area = models.FloatField(null=True)
objects = SiteManager()
Manager.py
class SiteManager(BaseManager):
use_in_migrations = True
def create(self, owner, **kwargs):
print('kwargs is ',kwargs)
site = self.model(
owner = owner,
area = kwargs['area'],
location=Point(float(kwargs['location']['latitude']), float(kwargs['location']['longitude'])),
)
site.save(using=self._db)
print('site is ',site)
return site
serializers.py
class SiteSerializer(serializers.ModelSerializer):
class Meta:
model = Site
fields = ('location', 'area')
# Serializer to get user details
class UserSiteSerializer(serializers.ModelSerializer):
site = SiteSerializer()
class Meta:
model = User
fields = ('fullName', 'email', 'site')
def create(self, validated_data):
site_data = validated_data.pop('site')
user = InterestedUser.objects.create(**validated_data)
Site.objects.create(owner=user, **site_data)
return user
Данные запроса:
{'fullName': 'rtyhgf', 'email': '8sdfggfs@er.com', 'site': {'location': {'longitude': 72.81919139881033, 'latitude': 18.925400020910235}, 'area': 636.865234375}
когда я печатаю site_data
в create
методе UserSiteSerializer
, я получаю OrderedDict([('area', 636.865234375)])