Django 1.10。*を使用しています。これは私のユーザー・プロファイル・モデルである:Djangoモデルの拡張デフォルトのユーザーモデル(一対一フィールド)、すべての結合モデルフィールドのregフォームの作成方法
:私は学生のためにフォームクラスを作成し、このようにHTMLテンプレートにform
コンテキストを渡す私のビューでFormViewコントロールクラスを拡張するViewクラスを作成するためにそれを使用
class student(models.Model):
user = models.OneToOneField(User, primary_key=True, on_delete=models.CASCADE)
state = models.CharField(max_length=21, null=True, blank=True, choices=in_states.STATE_CHOICES)
city = models.CharField(max_length=21, null=True, blank=True)
date_joined = models.DateTimeField(default=timezone.now)
educational_role = models.CharField(max_length=39, choices=EDUCATIONAL_ROLE)
institute = models.ForeignKey(educational_institute, null=True, blank=True)
language = models.CharField(max_length=8, choices=LANGUAGES)
@receiver(post_save, sender=User)
def create_user_profile(sender, instance, created, **kwargs):
if created:
student.objects.create(user=instance)
@receiver(post_save, sender=User)
def save_user_profile(sender, instance, **kwargs):
instance.profile.save()
forms.py:
class RegistrationForm(forms.ModelForm):
class Meta:
model = student
fields = ['user', 'state', 'city', 'educational_role', 'institute', 'language']
views.py:
class Register(FormView):
template_name = 'searcher/register.html'
form_class = RegistrationForm
def get_context_data(self, **kwargs):
context = super(Register, self).get_context_data(**kwargs)
context['applink'] = applink
context['forumlink'] = forumlink
return context
が存在しない場合は、どのように私はUser
モデルのemail
、firstname
、登録フォームがusername
を要求するように、これを変更する必要があるともstudent
モデルによって追加されたフィールドや新educational_institute
を作成するためのオプションを持ちますか既に?
はい、私はあなたの主張を得ていますが、Authの目的のために、 'User'ではなく' AbstractUser'クラスを直接拡張する方がはるかに優れていることがわかりました: 'class Student(AbstractUser):'。あなたは何を言っていますか? –
これらの2つのオプションのわずかな違いは、 '' AbstractUser'''から継承すると、あなたのユーザモデルはもうスワップできなくなるということです:https://github.com/django/django/blob/master/django/ contrib/auth/models.py#L367傷つけることはありませんが、おそらくそれを交換することは決してありません。しかし、将来、Djangoの人が何かを変更した場合でも、私は '' User'''から正確に継承したいと思うでしょう。 – Art
'User'クラスから拡張した場合、userchangeform、usercreationform、登録ビュー(MyUserのすべての追加フィールドも含む)の作成方法に関する完全なガイドを与えることができます。 「ページ」? –