Я был в той же ситуации и нашел оба решения полезными, но не полными. В обоих из них я мог создавать пользователей с пустым именем пользователя. Я не хотел, чтобы такие утечки были, вот что я сделал.
Сначала я создал форму проверки:
from django import forms
from django.forms import ModelForm
from django.contrib.auth.models import User
class UserForm(forms.ModelForm):
def __init__(self, *args, **kwargs):
super(UserForm, self).__init__(*args, **kwargs)
self.fields['username'].error_messages = {'required': "Please enter username"}
self.fields['username'].max_length = 30
self.fields['password'].error_messages = {'required': 'Please enter password'}
self.fields['password'].max_length = 30
self.fields['email'].required = False
def clean_username(self):
username = self.cleaned_data['username']
if len(username) < 4:
raise forms.ValidationError("Username has to be longer than 4 characters")
return username
def clean_password(self):
password = self.cleaned_data['password']
if len(password) < 5:
raise forms.ValidationError("Password has to be longer than 5 characters")
return password
class Meta:
model = User
fields = ('username', 'email', 'password')
Затем внутри UserResource
validation = FormValidation(form_class=UserForm)
def obj_create(self, bundle, request=None, **kwargs):
bundle = super(UserResource, self).obj_create(bundle, request, **kwargs)
bundle.obj.set_password(bundle.data.get('password'))
bundle.obj.save()
return bundle
Я надеюсь, что мое решение может помочь другим разработчикам. Удачного кодирования!