내 의도는 Django의 User 모델과 UserProfile 모델 (기본적으로 사용자에 대한 세부 정보/필드를 추가 함)을 사용하여 사용자 프로파일을 만드는 것입니다. 그런 다음 사용자 모델과 UserProfile 모델 (즉, 두 모델 모두의 필드에 대한 단일 양식)에 포함 된 필드를 채우도록 요청하는 등록 양식을 작성하려고합니다.Django에서 UserProfile에 대한 백엔드/데이터베이스에 데이터를 저장하는 방법
지금 내 양식에 필요한 데이터를 입력하면 뷰가 전달되고 서버가 User 객체를 만들고 심지어 UserProfile 객체에 연결합니다 (이해할 수있는대로이 연결은 models.py 클래스에서 생성 된 신호). 그러나 UserProfile (이 경우 "위치"필드)에 대한 정보는 추가되지 않으며 나와 관련하여 이유를 파악할 수 없습니다.
나는이 다음 models.py
class UserProfile(models.Model):
# This field is required.
user = models.ForeignKey(User, unique=True, related_name="connector")
location = models.CharField(max_length=20, blank=True, null=True)
def create_user_profile(sender, instance, created, **kwargs):
if created:
UserProfile.objects.create(user=instance)
post_save.connect(create_user_profile, sender=User)
나는이
class UserForm(ModelForm):
class Meta:
model = User
class UserProfileForm(ModelForm):
class Meta:
model = UserProfile
(정의 폼이 장고에 의해 정의 된 사용자 모델을 기반으로) 다음 forms.py 나는 다음과 같은 견해를 가지고 평
@csrf_protect
def register(request):
if request.method == 'POST':
form1 = UserForm(request.POST)
form2 = UserProfileForm(request.POST)
if form1.is_valid() and form2.is_valid():
#create initial entry for user
username = form1.cleaned_data["username"]
password = form1.cleaned_data["password"]
new_user = User.objects.create_user(username, password)
new_user.save()
#create entry for UserProfile (extension of new_user object)
profile = form2.save(commit = False)
profile.user = new_user
profile.save()
return HttpResponseRedirect("/books/")
else:
form1 = UserForm()
form2 = UserProfileForm()
c = {
'form1':form1,
'form2':form2,
}
c.update(csrf(request))
return render_to_response("registration/register.html", c)
I가 다음 register.html
<form action="/accounts/register/" method="post">{% csrf_token %}
<p style="color:red"> {{form.username.errors}}</p>
{{ form1.as_p }}
{{ form2.as_p }}
<input type="submit" value="Create the account">
</form>
내가 뭘 잘못하고 있는지 누가 알 수 있습니까? 이 작업을 수행하는 더 좋은 방법이 있습니까? 미리 감사드립니다!
POST 데이터에는 이러한 변수의 값이 들어 있습니다. 그게 당신이 요구하는 것입니까? – goelv
또한 등록 페이지에서 유효성을 검사하기 위해 사용자를 선택하라는 메시지가 나타납니다 (form2). 그러나이 사용자는 양식을 통해 만들려는 사용자입니다 (즉, 작성된 연도가 아닙니다). 고유 한 외래 키를 선택적으로 설정할 수 있습니까? – goelv
은 선택 사항이며 고유합니다. 이들은 역설적이다. 위의 코드를 사용해보고 알려주십시오. – Bartanix