django.contrib.auth.models.User
には、first_name
とlast_name
フィールドの両方にblank=True
があります。自分のモデルでどうすればblank=False, null=False
にすることができますか?ここでDjangoでfirst_nameとlast_nameを要求するユーザモデル
は基本的にExtending the existing User modelの指示に従って、私の実装です:python manage.py shell
でテストするとき
models.py
class Fellow(models.Model):
user = models.OneToOneField(
User,
on_delete=models.CASCADE
)
first_name = models.CharField(
_("first_name"),
max_length=30,
)
last_name = models.CharField(
_("last_name"),
max_length=30,
)
# other fields omitted
from . import signals
signals.py
from django.contrib.auth.models import User
from django.db.models.signals import post_save
from django.dispatch import receiver
from .models import Fellow
@receiver(post_save, sender=User)
def create_fellow_on_user_create(sender, instance, created, **kwargs):
if created:
Fellow.objects.create(user=instance)
しかし、私はエラーを得た:
>>> f = Fellow.objects.create(username='username', password='passwd')
Traceback (most recent call last):
File "<console>", line 1, in <module>
File "/Users/sunqingyao/Envs/django_tutorial/lib/python3.6/site-packages/django/db/models/manager.py", line 85, in manager_method
return getattr(self.get_queryset(), name)(*args, **kwargs)
File "/Users/sunqingyao/Envs/django_tutorial/lib/python3.6/site-packages/django/db/models/query.py", line 392, in create
obj = self.model(**kwargs)
File "/Users/sunqingyao/Envs/django_tutorial/lib/python3.6/site-packages/django/db/models/base.py", line 571, in __init__
raise TypeError("'%s' is an invalid keyword argument for this function" % list(kwargs)[0])
TypeError: 'username' is an invalid keyword argument for this function
元のUserクラスからモデルを派生させる必要があります。 @KlausD。 –
あなたは 'User'を直接サブクラス化するのですか?しかし、ドキュメントのサンプルコードでは 'class Employee(User):'の代わりに 'class Employee(models.Model):'と書かれています... –
@KlausD。 'django.core.exceptions.FieldError: 'Fellow'クラスのローカルフィールド 'first_name'が、基本クラス 'User'と同じ名前のフィールドと衝突します.' –