5

こんばんは、

現在、Django でサイトを作成しており、ユーザー プロファイルでユーザーを拡張しました。しかし、私には小さな問題があります。これが私の状況です:

  1. カスタム フィールドを追加するために、ユーザー プロファイルを拡張しました。
  2. モデルをユーザー管理モデルに追加したので、ユーザーを追加するときに、フィールドに直接入力してプロファイルを作成できます。
  3. ここで、これらの新しいカスタム ユーザー フィールドに何も追加しない場合、ユーザー追加ページで、Django 管理者はこれらのフィールドが null であるというエラーをスローしません (そして、そうではないはずです)。
  4. このユーザー追加管理ページでエラーをスローして、管理者が新しいユーザーを追加するときにプロファイルを入力する必要があるようにしたい.
  5. すべてのユーザーが管理パネルに追加されます。

これは可能ですか?どうもありがとう!

admin.py で

from django.contrib import admin
from django.contrib.auth.admin import UserAdmin as DjangoUserAdmin
from django.contrib.auth.models import User
from accounts.models import UserProfile


class UserProfileInline(admin.TabularInline):
    model = UserProfile


class UserAdmin(DjangoUserAdmin):
    inlines = [ UserProfileInline,]


admin.site.unregister(User)
admin.site.register(User, UserAdmin)

model.py で

class UserProfile(models.Model):
    user = models.OneToOneField(User)
    employee_number = models.PositiveIntegerField(unique=True)

    def __unicode__(self):
        return 'Number'
4

1 に答える 1

5

デフォルトでは、空のインラインが許可されているため、空のフォームに対してそれ以上のチェックは行われません。手動でオーバーライドする必要があります。

class UserProfileForm(forms.ModelForm):
    def __init__(self, *args, **kwargs):
        super(UserProfileForm, self).__init__(*args, **kwargs)
        if self.instance.pk is None:
            self.empty_permitted = False # Here

    class Meta:
        model = UserProfile


class UserProfileInline(admin.TabularInline):         
    model = UserProfile                               
    form = UserProfileForm  
于 2012-04-18T17:44:18.910 に答える