如何在Django上查询多对多关系?

坦率

我正在编写一个食品食谱应用程序。我希望它能够区分食谱,避免特定的食物不耐受(即乳糖、鸡蛋、麸质、二氧化硫......)。我为此提出了这个模型:

模型.py

from django.db import models
from unittest.util import _MAX_LENGTH

class Alimento(models.Model):
    INTOLERANCIAS = (
        ('00', 'Ninguna'),
        ('GL', 'Gluten'),
        ('CR', 'Crustáceos'),
        ('HU', 'Huevos'),
        ('FS', 'Frutos Secos'),
        ('AP', 'Apio'),
        ('MO', 'Mostaza'),
        ('SE', 'Sésamo'),
        ('PE', 'Pescado'),
        ('CA', 'Cacahuetes'),
        ('SO', 'Sulfitos'),
        ('SJ', 'Soja'),
        ('LA', 'Lácteos'),
        ('AL', 'Altramuz'),
        ('ML', 'Moluscos'),
        ('CA', 'Cacao'),


    )
    nombre = models.CharField(max_length=60)
    intolerancia = models.CharField(max_length=2, choices=INTOLERANCIAS)

    def __str__(self):
        return self.nombre


class Receta(models.Model):
    nombre = models.CharField(max_length=100)
    raciones = models.IntegerField(default=1)
    preparacion = models.TextField(default='')
    consejos = models.TextField(blank=True)
    ingredientes = models.ManyToManyField(Alimento, through='Ingrediente')

    def __str__(self):
        return self.nombre


class Ingrediente(models.Model):
    receta = models.ForeignKey('recetas.Receta', on_delete=models.CASCADE)
    alimento = models.ForeignKey('recetas.Alimento', related_name='ingredientes', on_delete=models.CASCADE)
    cantidad = models.FloatField(default=0)
    descripcion = models.CharField(max_length=60, blank=True)

    def __str__(self):
        return self.alimento.__str__()

我已经在 admin.py 中注册了它们,我可以创建/更新/删除它们,但是我在管理 UI 的任何地方都看不到 manytomany 字段。

admin.py 从 django.contrib 导入 admin

from .models import Alimento, Receta, Ingrediente

admin.site.register(Alimento)
admin.site.register(Receta)
admin.site.register(Ingrediente)

所以我去了shell并在那里尝试了一些查询

Alimento.objects.all()
<QuerySet [<Alimento: Pan>, <Alimento: Tomate>, <Alimento: Vinagre de vino>, <Alimento: Ajo>, <Alimento: Pimiento Verde>, <Alimento: Sal>, <Alimento: Aceite de Oliva>]>


Receta.objects.all()
<QuerySet [<Receta: Gazpacho>]>


gaz = Receta.objects.get(nombre='Gazpacho')
Ingrediente.objects.filter(receta=gaz)
<QuerySet [<Ingrediente: Pan>, <Ingrediente: Tomate>, <Ingrediente: Tomate>, <Ingrediente: Pimiento Verde>, <Ingrediente: Aceite de Oliva>, <Ingrediente: Vinagre de vino>, <Ingrediente: Ajo>]>

pan = Alimento.objects.get(nombre='Pan')
pan.intolerancia
'GL'

鉴于此,我如何查询给定不耐受/过敏(Alimento:intolerancia)的食谱(Receta)?

威尔弗里德

您可以访问Alimento模型,使用ingredientes您的模型 Receta的字段在你的过滤器,你可以使用它,并选中该领域intoleranciaAlimento

Receta.objects.filter(ingredientes__intolerancia='GL')

在评论中提出问题后更新,请参阅文档

Receta.objects.filter(ingredientes__intolerancia_in=['GL', 'CR'])

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在 Django 上同步多对多关系

来自分类Dev

如何查询多对多关系?

来自分类Dev

Django) 如何在多对多关系中查询另一个模型的字段

来自分类Dev

如何从多对多关系的属性中获取Django查询的值?

来自分类Dev

如何从多对多关系的属性中获取Django查询的值?

来自分类Dev

Django如何查询所有对象匹配的多对多关系

来自分类Dev

如何在Oracle中获取多对多关系查询?

来自分类Dev

如何在 Laravel 中查询逆多对多关系

来自分类Dev

如何在Django中从多对多关系中检索数据

来自分类Dev

如何在Django中保存多对多关系

来自分类Dev

如何在Django中过滤多对多关系

来自分类Dev

如何在Django中保存多对多关系

来自分类Dev

基于多对多关系的Django查询

来自分类Dev

了解多对多关系:如何在 django 中选择属于我的多对多关系字段的实例?

来自分类Dev

如何在同一张桌子上建立多对多关系(多对多Join To Self)

来自分类Dev

如何在Flask SQL Alchemy中查询一对多/多对多关系?

来自分类Dev

Django 多对多关系

来自分类Dev

如何在关系字段的最大值上加入多对多关系

来自分类Dev

Slick 3.0.0:如何查询一对多/多对多关系

来自分类Dev

如何在MySQL中查询产品和过滤器之间的多对多关系?

来自分类Dev

JPA-如何在查询多对多关系时防止不必要的联接

来自分类Dev

如何在具有多对多关系的查询中添加 id 数组 Sequelize

来自分类Dev

如何在满足计数条件的情况下查询具有多对多关系的表

来自分类Dev

查询与DetachedCriteria的多对多关系

来自分类Dev

LINQ查询多对多关系

来自分类Dev

播放-查询多对多关系

来自分类Dev

Yii多对多关系查询

来自分类Dev

休眠查询多对多关系

来自分类Dev

无法查询多对多关系

Related 相关文章

  1. 1

    如何在 Django 上同步多对多关系

  2. 2

    如何查询多对多关系?

  3. 3

    Django) 如何在多对多关系中查询另一个模型的字段

  4. 4

    如何从多对多关系的属性中获取Django查询的值?

  5. 5

    如何从多对多关系的属性中获取Django查询的值?

  6. 6

    Django如何查询所有对象匹配的多对多关系

  7. 7

    如何在Oracle中获取多对多关系查询?

  8. 8

    如何在 Laravel 中查询逆多对多关系

  9. 9

    如何在Django中从多对多关系中检索数据

  10. 10

    如何在Django中保存多对多关系

  11. 11

    如何在Django中过滤多对多关系

  12. 12

    如何在Django中保存多对多关系

  13. 13

    基于多对多关系的Django查询

  14. 14

    了解多对多关系:如何在 django 中选择属于我的多对多关系字段的实例?

  15. 15

    如何在同一张桌子上建立多对多关系(多对多Join To Self)

  16. 16

    如何在Flask SQL Alchemy中查询一对多/多对多关系?

  17. 17

    Django 多对多关系

  18. 18

    如何在关系字段的最大值上加入多对多关系

  19. 19

    Slick 3.0.0:如何查询一对多/多对多关系

  20. 20

    如何在MySQL中查询产品和过滤器之间的多对多关系?

  21. 21

    JPA-如何在查询多对多关系时防止不必要的联接

  22. 22

    如何在具有多对多关系的查询中添加 id 数组 Sequelize

  23. 23

    如何在满足计数条件的情况下查询具有多对多关系的表

  24. 24

    查询与DetachedCriteria的多对多关系

  25. 25

    LINQ查询多对多关系

  26. 26

    播放-查询多对多关系

  27. 27

    Yii多对多关系查询

  28. 28

    休眠查询多对多关系

  29. 29

    无法查询多对多关系

热门标签

归档