【问题标题】:MongoDB embedded and array fields in djangoDjango 中的 MongoDB 嵌入和数组字段
【发布时间】:2021-03-29 22:14:19
【问题描述】:

我有一个关于在 django 中查询嵌入和数组字段的问题。

这是我的 models.py 文件:

from djongo import models

class detalji_igrica(models.Model):
    pegi_rejting = models.IntegerField()
    izdavac = models.CharField(max_length=64)
    zanr = models.CharField(max_length=32)
    datum_izlaska = models.CharField(max_length=32)

    class Meta:
        abstract = True

class komentari(models.Model):
    id_korisnika = models.IntegerField()
    komentar_naslov = models.CharField(max_length=64)
    komentar = models.TextField()
    datum_komentara = models.CharField(max_length=32)
    rejting_korisnika = models.FloatField()

    class Meta:
        abstract = True

class Igrica(models.Model):
    sifra_artikla = models.IntegerField()
    naziv = models.CharField(max_length=32)
    cena = models.FloatField()
    konzola = models.CharField(max_length=32)
    slika = models.CharField(max_length=64)
    opis = models.TextField()
    rejting = models.FloatField()
    vrsta = models.CharField(max_length=32)
    detalji_igrica = models.EmbeddedField(
        model_container = detalji_igrica
    )
    komentari = models.ArrayField(
        model_container = komentari
    )

这是我的views.py文件:

@api_view(['GET'])
def najjeftinije_prvo(request):
    igrice = Igrica.objects.get(detalji_igrica__pegi_rejting = 18)
    if request.method == 'GET':
        igrica_serializer = IgricaSerializer(igrice, many=True)
        return JsonResponse(igrica_serializer.data, safe=False)

这里是 serializers.py:

class IgricaSerializer(serializers.ModelSerializer):
    class Meta:
        model = Igrica
        fields = (
            'id',
            'sifra_artikla',
            'naziv',
            'cena',
            'konzola',
            'slika',
            'opis',
            'rejting',
            'vrsta',
            'detalji_igrica',
            'komentari'
    )

如您所见,它有一个嵌入的和一个从 djongo 模型导入的数组字段。 现在,当我想搜索所有游戏时,例如在 detalji_igrica 字段 pegi_rejting = 18 的游戏,这是我得到的消息:

/api/igrice/najjeftinije 处的字段错误 不支持查找 EmbeddedField 的“pegi_rejting”或不允许加入该字段。

Array 字段的类似消息:

/api/igrice/najjeftinije 处的字段错误 ArrayField 的不支持查找“id_korisnika”或不允许加入该字段。

非常感谢您的帮助!

【问题讨论】:

    标签: django mongodb djongo


    【解决方案1】:

    我无法直接回答您的问题,因为我无法从我的个人项目中找到任何有关问题的答案。无论如何,您需要为类使用正确的 Python 命名样式。

    您的模型字段名称与您的模型容器名称相似。

    class komentari(models.Model) 更改为class Komentari(models.Model),然后

    komentari = models.ArrayField(
        model_container = komentari
    )
    

    komentari = models.ArrayField(
        model_container = Komentari
    )
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-10-24
      • 1970-01-01
      • 2016-10-16
      • 2012-03-25
      • 2016-12-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多