Crear usuario con información relacionada con el modelo de

Quiero crear un sitio web como coursera.org. Así que tengo que crear dos usertypes como estudiante y el profesor. ¿cuál es la mejor manera de hacerlo?

He intentado crear manualmente usertypes y predefinir tipos de usuario en models.py. Pero usertype no se muestran en la página de administración. lo que ia estoy haciendo mal?

from django.db import models
from django.contrib.auth.models import User
# Create your models here.

class Usertype(models.Model):
    user = models.ForeignKey(User,related_name = 'Usertype')
    usertype = ('Student','Teacher')

2 Respuestas

  • HariHaraSudhan
    4 de mayo de 2019

    tienes que crear ModelAdmin en admin.py

    class UserTypeModelAdmin(admin.ModelAdmin):
        list_display = ('user', 'usertype',)
    
    admin.site.register(UserType, UserTypeModel)
    

    para información adicional list_display

  • Willem Van Onsem
    4 de mayo de 2019

    Usted necesita para hacer usertype un campo determinado, por ejemplo un CharField donde se establece la choices [Django-doc], como:

    from django.db import models
    from django.contrib.auth.models import User
    
    USERTYPE_CHOICES = (
        ('S', 'Student'),
        ('T', 'Teacher')
    )
    
    class Usertype(models.Model):
        user = models.ForeignKey(User,related_name = 'Usertype')
        usertype = models.CharField(max_length=1, choices=USERTYPE_CHOICES)

    Tenga en cuenta que usted probablemente querrá hacer el ForeignKey un OneToOneField [Django-doc] en lugar de evitar la creación de dos Usertypes de la misma User.

    También es aconsejable el uso de get_user_model [Django-doc] en lugar de referirse a la User modelo directamente, ya que permite cambiar el modelo de usuario más cómoda, como:

    from django.db import models
    from django.contrib.auth import get_user_model
    
    USERTYPE_CHOICES = (
        ('S', 'Student'),
        ('T', 'Teacher')
    )
    
    class Usertype(models.Model):
        user = models.OneToOneField(get_user_model(), related_name='Usertype')
        usertype = models.CharField(max_length=1, choices=USERTYPE_CHOICES)

    En su app/admin.py, también tendrá "registrar" su modelo que se muestra en el sitio de administración:

    # app/admin.py
    
    from django.contrib import admin
    from app.models import Usertype
    
    admin.site.register(Usertype)