如何使用 Djongo 在 MongoDB 中正确保存文档

How to proper save documents in MongoDB using Djongo

我遇到了无法使用 Django 在 MongoDB 中保存文档的问题。 错误如下:

AttributeError: 'NoneType' object has no attribute 'attname'

在库 Djongo 的帮助下,我制作了这些模型:

from djongo import models
from django.utils import timezone

class LatLng(models.Model):
    latitude = models.FloatField(null=False)
    longitude = models.FloatField(null=False,) 

    def __init__(self,latitude, longitude):
        self.latitude = latitude
        self.longitude = longitude

    class Meta:
        abstract = True


class Parameters(models.Model):
    cond1= models.IntegerField(null=False,)
    cond2= models.IntegerField(null=False,)
    cond3= models.IntegerField()

    class Meta:
        abstract = True


class MyModel(models.Model):
    name = models.CharField(max_length=150, null=False)
    des= models.CharField(max_length=500)
    pub_date = models.DateTimeField(editable=False)
    mod_date = models.DateTimeField()
    parameters = models.EmbeddedField(
        model_container=Parameters
    )
    wp= models.ArrayField(
        model_container=LatLng,
        null=False
    )

    objects = models.DjongoManager() 

    def __init__(self, name, parameters, wp,des=""):
        self.name = name
        self.parameters = parameters
        self.waypoints = waypoints
        


    def save(self, *args, **kwargs):
        ''' On save, update timestamps '''
        if self.id is None:
            self.pub_date = timezone.now()
        self.mod_date = timezone.now()
        return super(MyModel, self).save(*args, **kwargs)

    def __str__(self):
        return self.name

我的 API 看起来像:

def get_wp(pls):
    wps = []
    for pin pls:
        coord = LatLng(latitude=p['latitude'], longitude=p['longitude'])
        wps.append(coord)
    return wps


@api_view(['POST'])
def save(request):
    data = json.loads(request.body.decode('utf-8'))

    scores = Parameters(cond1=data['cond1'], cond2=data['cond2'])
    wps = get_wp(data['pls'])
    
    obj = MyModel(name=data['name'],parameters=scores, waypoints=wps)


    print("--> {}".format(obj.name))  #working fine
    
    itinerary.save()   ## it dies here

    return JsonResponse({})

我不知道我做错了什么。由于这是我第一次使用 Django(使用 MongoDB),因此非常感谢对我的代码提出任何建议。

尝试删除 LatLng __init__() 或者如果仍然需要则尝试:

def __init__(self, *args, **kwargs):
    super().__init__(*args, **kwargs)
    # Do your changes here