2012-04-18 45 views
5

Chào buổi tối,Mở rộng hồ sơ người dùng ở Django. Quản trị viên tạo người dùng

Tôi hiện đang tạo trang web với Django và tôi đã mở rộng người dùng bằng hồ sơ người dùng. Tôi có một vấn đề nhỏ. Đây là tình huống của tôi:

  1. Tôi đã mở rộng hồ sơ người dùng để thêm các trường tùy chỉnh.
  2. Tôi đã thêm mô hình vào Mô hình quản trị người dùng, vì vậy khi tôi thêm người dùng, tôi có thể điền trực tiếp vào các trường để tạo hồ sơ.
  3. Bây giờ, nếu tôi không thêm bất kỳ điều gì trong các trường người dùng tùy chỉnh mới này, trong trang thêm người dùng, Quản trị viên Django sẽ không ném cho tôi lỗi nói rằng các trường này là rỗng (và không giả sử là)
  4. Tôi muốn nó gửi cho tôi lỗi trong trang Thêm người quản trị người dùng này, để quản trị viên sẽ phải điền vào hồ sơ khi thêm người dùng mới.
  5. TẤT CẢ người dùng sẽ được thêm trong Bảng điều khiển quản trị.

Điều này có khả thi không? Cảm ơn rất nhiều!

trong 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) 

Trong model.py

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

    def __unicode__(self): 
     return 'Number' 

Trả lời

5

Theo mặc định, trống inline được phép và do đó không kiểm tra hơn nữa sẽ được đưa cho một hình thức trống rỗng. Bạn cần phải ghi đè theo cách thủ công:

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 
+0

Thật tuyệt! Bạn có nhớ giải thích thêm một chút về mã không? Đặc biệt là lớp Meta: một phần! Cảm ơn bạn đời – abisson

+0

Ngoài ra, cú pháp nào nếu tôi muốn chỉ có một trong các trường của mình là empty_permitted = false? và phần còn lại là sự thật? – abisson

+0

@abisson 'empty_permitted' là một tham số không có giấy tờ' BaseForm' chấp nhận: khi biểu mẫu đã gửi không bị thay đổi từ dữ liệu ban đầu và 'empty_permitted' là' True', 'full_clean()' của biểu mẫu sẽ không thực hiện bất kỳ xác thực nào khác. Bạn có thể kiểm tra 'empty_permitted' trong' django/forms/forms.py' và 'django/forms/formsets.py'. Nếu bạn muốn có một trong các trường không trống, bạn có thể thử đặt 'empty_permitted = True' cho biểu mẫu và' blank = True' cho các trường khác. – okm

Các vấn đề liên quan