После добавления нового поля в мою модель, оно не отображается в форме.
Я работал над этим приложением django и расширил уже существующую модель User с помощью моей собственной модели UserProfile с помощьюдополнительные поля.Недавно я решил добавить дополнительное поле в модель UserProfile (profile_type).Я добавил его в модель и включил в соответствующую форму, а также запустил изменения и миграции.Затем я попытался вставить начальное значение в это поле в своих представлениях и обнаружил, что оно не отображается в форме через print (), однако все остальные поля имеют вид.
Моя модель UserProfile
class UserProfile(models.Model):
user = models.OneToOneField(User, on_delete = models.CASCADE, related_name='userprofile')
gender = models.CharField(max_length = 10)
city = models.CharField(max_length = 45)
country = models.CharField(max_length = 45)
birthdate = models.DateField(null=True)
phone_number = models.CharField(max_length = 15)
profile_type = models.CharField(max_length = 6)
@receiver(post_save, sender=User)
def save_profile(sender, instance, created, **kwargs):
if created:
profile = UserProfile(user=instance)
profile.save()
Мои формы UserProfile (UserProfileForm содержит поля, необходимые для регистрации, AdditionalUserProfileForm - остальные)
class UserProfileForm(UserCreationForm):
class Meta:
model = User
fields = ('first_name', 'last_name', 'email', 'username', 'password1', 'password2')
def save(self, commit=True):
user = super(UserProfileForm, self).save(commit=True)
user.email = self.cleaned_data['email']
user.first_name = self.cleaned_data['first_name']
user.last_name = self.cleaned_data['last_name']
user.save()
return user
class AdditionalUserProfileForm(forms.ModelForm):
profile_type = forms.CharField(max_length=6)
class Meta:
model = UserProfile
fields = ('gender', 'city', 'country', 'birthdate', 'phone_number', 'profile_type')
Мой вид регистрации (я хочу добавить значение для profile_type вручную при создании экземпляра
@transaction.atomic
def signup_view(request):
if request.method == 'POST':
user_profile_form = UserProfileForm(request.POST)
initial = {
'profile_type': 'user'
}
additional_user_profile_form = AdditionalUserProfileForm(request.POST, initial=initial)
valid = user_profile_form.is_valid() * additional_user_profile_form.is_valid()
if valid:
user = user_profile_form.save()
for field in ['gender', 'city', 'country', 'birthdate', 'phone_number']:
setattr(user.userprofile, field,
additional_user_profile_form.cleaned_data.get(field))
user.userprofile.save()
return redirect('login')
else:
user_profile_form = UserProfileForm()
additional_user_profile_form = AdditionalUserProfileForm()
context = {
'user_profile_form': user_profile_form,
'additional_user_profile_form': additional_user_profile_form,
}
return render(request, 'registration/signup.html', context)
Распечатка полей формы в терминале не показывает, что profile_type является одним из них. Я видел в каком-то потоке, что это ошибка, но исправление не сработало для меня. Это было что-то об изменениифункция get_fieldsets в contrib / admin / options.py. Надеюсь, это подсказка. Спасибо!