Django framework: получить значение из django.db.models.fields.IntegerField

Как получить значение из класса django.db.models.fields.IntegerField? Я хочу получить 1 из поля admin. Это python код: класс модели и функция view

from django.db import models
from django.db import connection
import pymysql
    
# Create your models here.

class Users(models.Model):
    def __init__(self,*args, **kwargs):
        super().__init__(*args, **kwargs)
        self.firstname=models.CharField(max_length=100)
        self.lastname=models.CharField(max_length=100) 
        self.username=models.CharField(max_length=50)
        self.password=models.CharField(max_length=255)
        self.admin=models.IntegerField()
        self.createdAt=models.DateTimeField(db_column="created_at")

    def getAdmin(self):
        return self.admin

    class Meta:
        db_table = 'users'

Функция представления, когда я запускаю user = Users.objects.get(id=userId)

def home(request):    
    #controllo se sei loggato
    if request.session.has_key('loggedin'):
        if request.session['loggedin'] != True:
            return redirect("login")
    else:
        return redirect("login")
    
    #l'utente è loggato recupero le informazioni
    userId = int(request.session['id'])
    user = Users.objects.get(id=userId) 
    print(type(user))
    print(type(user.getAdmin()))
    tmplVar = {}
    tmplVar["admin"] = user.admin
    return render(request, 'pygiustizia/home.html',{'tmplVar': tmplVar})

вы печатаете тип, а не значение

print(type(user))
print(type(user.getAdmin()))

если вы попробуете что-то вроде:

print(user)
print(user.admin)

вы должны получить что-то на заметку:

>> <object>
>> 1

без переопределения __repr__ или __str__

Я запутался. Я закомментировал super и __init__ и он работает. Почему в первый раз нет?

from django.db import models
from django.db import connection
import pymysql
   
# Create your models here.

class Users(models.Model):

    firstname=models.CharField(max_length=100)
    lastname=models.CharField(max_length=100) 
    username=models.CharField(max_length=50)
    password=models.CharField(max_length=255)
    admin=models.IntegerField()
    createdAt=models.DateTimeField(db_column="created_at")

    def getAdmin(self):
        return self.admin

Я хочу инициализировать все поля колонок в init.

Предполагаю, что вам нужно значение admin. Насколько я понимаю, вы можете использовать метод filter на вашем объекте внутри вашей модели Users. Поскольку вы инциализировали поля модели внутри метода __init__, что, я уверен, не является хорошей практикой, но, основываясь на вашем требовании, вы можете сделать следующее:

from django.db import models
    
# Create your models here.

class Users(models.Model):
    def __init__(self,*args, **kwargs):
        super().__init__(*args, **kwargs)
        self.firstname=models.CharField(max_length=100)
        self.lastname=models.CharField(max_length=100) 
        self.username=models.CharField(max_length=50)
        self.password=models.CharField(max_length=255)
        self.admin=models.IntegerField()
        self.createdAt=models.DateTimeField(db_column="created_at")

    def getAdmin(self):
        return self.objects.get(admin=self.admin)

    class Meta:
        db_table = 'users'

Тогда вы можете заменить вашу строку user = Users.objects.get(id=userId) на user = User(userId)

Надеюсь, это то, что вы ищете!

Вернуться на верх