Модель AbstractUser с настраиваемым полем показывает myapp.class.None - PullRequest
1 голос
/ 07 августа 2020

У меня есть следующая модель:

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

Need помощь не может попасть в настраиваемое поле следует

1 Ответ

0 голосов
/ 07 августа 2020

A менеджер напечатает <i>ModelName</i>.None. Вы можете использовать .all(), чтобы получить QuerySet, который представляет этот менеджер:

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

Вы можете использовать .prefetch_related(…) [Django - doc] , чтобы предотвратить проблему N + 1 и загрузить все связанные объекты в большом количестве и выполнить СОЕДИНЕНИЕ на уровне Django / Python:

def index(request):
    actualUser = User.objects.<b>prefetch_related('follows')</b>
    for i in actualUser:
        print(i.id)
        print(i.follows.all())
        
    return render(request, 'network/index.html')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...