python - 如何将多对多关系转换为查询集?

标签 python django python-3.x django-models

我在 Django 中有一个模型,与另一个具有ManyToManyField 的模型相关。我想检索 ManyToManyField 的所有元素。

以下是型号:

class Personnel(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE, primary_key=True)
    adresse = models.CharField(max_length=150, verbose_name=_("Adresse"))
    telephone = models.CharField(max_length=15, verbose_name=_("Téléphone"))
    dossiermedical = models.ManyToManyField("DossierMedical",  related_name=_("travaille_sur"))

class DossierMedical(models.Model):
    patient = models.OneToOneField("Patient", on_delete=models.CASCADE)

在 Django shell 中,我执行了以下操作:

p = Personnel.objects.get(pk=User.objects.get(pk=1))
d = p.dossiermedical.all()
<QuerySet []>

但是,当我是该人员的 Django 管理员时,您有:enter image description here

回应

基本上,图像中的显示与链接的 DossierMedical 对象无关。要添加对象,您应该像这样修改管理页面:

class PersonnelAdmin(admin.ModelAdmin):
     model= Personnel
     filter_horizontal = ('dossiermedical',)

之后,您只需注册它并进入 django 提供的自动生成的管理页面即可。

最佳答案

不要再使用ModelName.objects.get(pk=1),因为它会引发异常。请改用 ModelName.objects.filter(pk=1).first()django.shortcuts.get_object_or_404(ModelName, pk=1)

为模型重写 __str__ 函数是一个很好的做法,如下所示:

class Personnel(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE, primary_key=True)
    adresse = models.CharField(max_length=150, verbose_name=_("Adresse"))
    telephone = models.CharField(max_length=15, verbose_name=_("Téléphone"))
    dossiermedical = models.ManyToManyField("DossierMedical",  related_name=_("travaille_sur"))

    def __str__(self):
        return f'#{self.pk} {self.user.full_name}'

class DossierMedical(models.Model):
    patient = models.OneToOneField("Patient", on_delete=models.CASCADE)

    def __str__(self):
        return f'#{self.pk} {self.patient.full_name}'

您还可以为 DossierMedical 模型添加内联,并将其放置到 PersonnelAdmin 的“内联”字段中,如 here 中所述。 .

关于python - 如何将多对多关系转换为查询集?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54571887/

相关文章:

Python 多处理示例不起作用

python - tensorflow 模型和转换后的 tflite 之间的精度下降

python - 如何在 Django ImageField 中验证图像格式

python - Django:如何在聚合中使用外键字段?

python - docker-compose psql 无法连接到服务器

python - 在 Pandas/Python 中合并从一个点开始的所有列

带有 AWS S3 的 Django-Oscar 正确保存图像

python - CentOS 上 pip 包管理器的问题

python - 像 python 代码一样打印嵌套对象(风格指南)

python - 使用 **kwargs 实现向后兼容