未获取ManyToManyField类型的字段及其值

时间:2019-01-07 09:16:40

标签: django django-models

我有一个名为Persona的Django模型:

class Persona(models.model):
    name=models.CharField(max_length=100,primary_key=True)
    pages_visited = models.ManyToManyField(Page)
    items_searched = models.ManyToManyField(ItemsSearched)
    visits = models.IntegerField(null=True,blank=True)
    connect = models.CharField(max_length=True,null=True,blank=True)
    image = models.ForeignKey('Image',on_delete=models.CASCADE)
    def __str__(self):
        return self.name

我有一个用于此模型的对象:

<QuerySet [<Persona: aman>]>

现在,当我尝试获取该对象的所有字段的值时,我可以看到所有字段及其对应的值,但ManyToManyField类型的字段除外。

执行此命令可获得以下结果:Persona.objects.filter(name ='aman')。values()

<QuerySet [{'visits': None, 'image_id': 3, 'name': 'aman', 'connect': 'call'}]>

虽然我登录管理员时可以看到它们,但我看不到“ items_searched”和“ pages_visited”字段及其对应的值。

这些是向我展示死刑的图像:

命令提示符 enter image description here

管理面板 enter image description here

2 个答案:

答案 0 :(得分:0)

要访问django中提交的m2m,请使用 .all()关键字,参考this

p1 = Persona.objects.filter(name='aman')
p1_m2m = p1.pages_visited.all()

这将提供您想要的结果

答案 1 :(得分:0)

我相信您正在寻找的是Inlines

在您的管理文件中,添加

from .models import Page # Edit this import according to your project structure

class PagesVisitedInline(admin.TabularInline):
    model = Page

class PersonaAdmin(admin.ModelAdmin):
    [...] # admin code goes here
    inlines = [PagesVisitedInline, ]

如果愿意,您也可以使用StackedInline,请阅读更多here