首页 > 解决方案 > 具有自定义字段的 AbstractUser 模型显示 myapp.class.None

问题描述

我有以下模型:

from django.contrib.auth.models import AbstractUser
from django.db import models


class User(AbstractUser):
    follows = models.ManyToManyField("self", symmetrical=False, blank=True, null=True)
    pass

class Post(models.Model):
    title = models.CharField(max_length=255)
    body = models.TextField()
    likes = models.PositiveIntegerField()
    dislikes = models.PositiveIntegerField()
    user = models.ForeignKey(User , on_delete=models.CASCADE)

和以下views.py文件:

from django.shortcuts import render

from .models import *


def index(request):
    actualUser = User.objects.all()
    for i in actualUser:
        print(i.id)
        print(i.follows)
        
    return render(request, "network/index.html")

但它打印了这个:

1
network.User.None
2
network.User.None

需要帮助无法达到自定义字段如下

标签: pythondjango

解决方案


经理将打印ModelName.None. 您可以利用.all()获得QuerySet该经理提供的:

def index(request):
    actualUser = User.objects.all()
    for i in actualUser:
        print(i.id)
        print(i.follows.all())
        
    return render(request, 'network/index.html')

您可以使用.prefetch_related(…)[Django-doc]来防止N+1 问题并批量加载所有相关对象并在 Django/Python 级别进行 JOINing:

def index(request):
    actualUser = User.objects.prefetch_related('follows')
    for i in actualUser:
        print(i.id)
        print(i.follows.all())
        
    return render(request, 'network/index.html')

推荐阅读