Создать пользовательскую информационную модель - PullRequest
1 голос
/ 04 мая 2019

Я хочу создать такой сайт, как coursera.org. Поэтому мне нужно создать два типа пользователя как ученик и учитель. Каков наилучший способ сделать это?

Я попытался создать пользовательские типы вручную и предопределить пользовательские типы в models.py. Но пользовательский тип не отображается на странице администратора. что я делаю не так?

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 ]

0 голосов
/ 04 мая 2019

Вам нужно сделать usertype определенным полем, например CharField, где вы установите choices [Django-doc] , например:

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

<b>USERTYPE_CHOICES</b> = (
    ('S', 'Student'),
    ('T', 'Teacher')
)

class Usertype(models.Model):
    user = models.ForeignKey(User,related_name = 'Usertype')
    <b>usertype = models.CharField(max_length=1, choices=USERTYPE_CHOICES)</b>

Обратите внимание, что вы, вероятно, захотите сделать ForeignKey a OneToOneField [Django-doc] вместо того, чтобы избежать создания двух Usertype s для одного и того же User .

Желательно также использовать get_user_model [Django-doc] вместо прямой ссылки на модель User, поскольку это делает изменение пользовательской модели более удобным, как:

from django.db import models
from django.contrib.auth import <b>get_user_model</b>

USERTYPE_CHOICES = (
    ('S', 'Student'),
    ('T', 'Teacher')
)

class Usertype(models.Model):
    user = models.<b>OneToOneField</b>(<b>get_user_model()</b>, related_name='Usertype')
    usertype = models.CharField(max_length=1, choices=USERTYPE_CHOICES)

В вашем app/admin.py вам также нужно будет «зарегистрировать» вашу модель, чтобы она отображалась на сайте администратора:

# app/admin.py

from django.contrib import admin
from app.models import Usertype

admin.site.register(Usertype)
0 голосов
/ 04 мая 2019

Вы должны создать собственный ModelAdmin в admin.py

class UserTypeModelAdmin(admin.ModelAdmin):
    list_display = ('user', 'usertype',)

admin.site.register(UserType, UserTypeModel)

для дополнительной информации list_display

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...