Tôi có biểu mẫu đăng ký tùy chỉnh để người dùng thêm hồ sơ trên ứng dụng của mình. Tuy nhiên, một lỗi gần đây đã xuất hiện ở chỗ biểu mẫu không lưu thông tin được đưa vào tất cả các trường.Biểu mẫu Django với mối quan hệ nhiều-nhiều không tiết kiệm
Mẫu người dùng của tôi, MyUser
có mối quan hệ ManyToMany với một mô hình khác, Interest
và đây là nơi các sự cố phát sinh. Tôi không chắc chắn nếu đó là chế độ xem RegistrationForm
hoặc chế độ xem register
gây ra điều đó, vì vậy tôi đã bao gồm cả bên dưới, cũng như mã mô hình. Tôi cũng có một cái nhìn cho người dùng cập nhật hồ sơ của họ, cũng bao gồm, một khi nó được tạo ra, và điều này đang làm việc hoàn toàn hoàn hảo. Đây là chế độ xem personal
. Như tôi đã nói, chỉ có trường Interest
không được trả lại, mặc dù nó đang được điền vào trang đăng ký.
Bất kỳ trợ giúp hoặc lời khuyên nào được đánh giá cao, cảm ơn.
models.py
class Interest(models.Model):
title = models.TextField()
def __unicode__(self):
return self.title
class MyUser(AbstractBaseUser):
email = models.EmailField(
verbose_name='email address',
max_length=255,
unique=True,
)
first_name = models.CharField(max_length=30)
last_name = models.CharField(max_length=40)
date_of_birth = models.DateField()
course = models.ForeignKey(Course, null=True)
location = models.ForeignKey(Location, null=True)
interests = models.ManyToManyField(Interest, null=True)
bio = models.TextField(blank=True)
is_active = models.BooleanField(default=True)
is_admin = models.BooleanField(default=False)
objects = MyUserManager()
USERNAME_FIELD = 'email'
REQUIRED_FIELDS = ['date_of_birth']
views.py
def register(request):
if request.method == 'POST':
form = RegistrationForm(data=request.POST)
if form.is_valid():
form.save()
return redirect('/friends/home/')
else:
form = RegistrationForm()
template = "adduser.html"
data = { 'form': form, }
return render_to_response(template, data, context_instance=RequestContext(request))
@login_required(login_url='/friends/login/')
def personal(request):
"""
Personal data of the user profile
"""
profile = request.user
if request.method == "POST":
form = ProfileForm(request.POST, instance=profile)
if form.is_valid():
form.save()
messages.add_message(request, messages.INFO, _("Your profile information has been updated successfully."))
return redirect('/friends/success/')
else:
form = ProfileForm(instance=profile)
template = "update_profile.html"
data = { 'section': 'personal', 'form': form, }
return render_to_response(template, data, context_instance=RequestContext(request))
forms.py
class RegistrationForm(forms.ModelForm):
"""
Form for registering a new account.
"""
email = forms.EmailField(widget=forms.TextInput, label="Email")
password1 = forms.CharField(widget=forms.PasswordInput,
label="Password")
password2 = forms.CharField(widget=forms.PasswordInput,
label="Password (again)")
course = forms.ModelChoiceField(queryset=Course.objects.order_by('title'))
location = forms.ModelChoiceField(queryset=Location.objects.order_by('location'))
class Meta:
model = MyUser
fields = [
'first_name',
'last_name',
'date_of_birth',
'email',
'password1',
'password2',
'course',
'location',
'interests',
'bio',
]
def __init__(self, *args, **kwargs):#Sort interests alphabetically
super(RegistrationForm, self).__init__(*args, **kwargs)
self.fields['interests'].queryset = Interest.objects.order_by('title')
def clean(self):
cleaned_data = super(RegistrationForm, self).clean()
if 'password1' in self.cleaned_data and 'password2' in self.cleaned_data:
if self.cleaned_data['password1'] != self.cleaned_data['password2']:
raise forms.ValidationError("Passwords don't match. Please enter again.")
return self.cleaned_data
def save(self, commit=True):
user = super(RegistrationForm, self).save(commit=False)
user.set_password(self.cleaned_data['password1'])
if commit:
user.save()
return user
Thank-you. Tôi mất 3 giờ trên 'tính năng' này. –
lên cho 'save_m2m() có trên Biểu mẫu' :) – cutteeth