簡體   English   中英

django-將注冊表單信息鏈接到用戶個人資料模型

[英]django - linking the register form info to user profile model

我正在嘗試制作一個包含注冊/登錄操作的webapp。 登錄工作正常,但注冊表格令人沮喪。

我有一個從UserCreationForm繼承的類注冊表單。 創建用戶時,會在管理頁面中創建並查看用戶,但是我遇到的問題是無法在管理頁面的UserProfile模型中看到他們。 它不鏈接信息,我找不到鏈接它們的方法。

這是注冊表格:

from django import forms
from django.contrib.auth.models import User
from django.contrib.auth.forms import UserCreationForm

    class RegistrationForm(UserCreationForm):
        email = forms.EmailField(required=True)
        city = forms.CharField(required=False)
        country = forms.CharField(required=True)
        first_name = forms.CharField(required=True)
        last_name = forms.CharField(required=True)
        username = forms.CharField(required=True)

        class Meta:
            model = User
            fields = (
                'username',
                'first_name',
                'last_name',
                'country',
                'city',
                'email'
            )

            def save(self, commit=True):
                user = super(RegistrationForm, self).save(commit=False)
                #user.first_name = self.cleaned_data['first_name']

                if commit:
                    user.save()

                return user

這是我的模型:

class UserProfile(models.Model):
    user = models.OneToOneField( User,
                                on_delete=models.CASCADE
                                )
    username = models.TextField(max_length=30, default="")
    first_name = models.TextField(max_length=30, default="")
    last_name = models.TextField(max_length=30, default="")
    country = models.TextField(max_length=30, default="Which country are you from?")
    city = models.TextField(max_length=30, default="Which city are you from?")


class ColorChoice(models.Model):
    user = models.ForeignKey(
                            'UserProfile',
                            on_delete=models.CASCADE
                            )
    color1 = models.IntegerField()
    color2 = models.IntegerField()
    color3 = models.IntegerField()
    color4 = models.IntegerField()
    color5 = models.IntegerField()

和我的view.py進行注冊:

def register(request):
    if request.method == 'POST':
        form = RegistrationForm(request.POST)
        if form.is_valid():
            form.save()
            return redirect('color')
    else:
        form = RegistrationForm()

        args = {'form': form}
        return render(request, 'account/create_new.html', args)

您的form僅為User創建一個新對象。 您可能需要添加一個signal ,例如為UserProfile創建一個新對象。

像這樣:

def create_user_profile(sender, instance, created, **kwargs):
    if created:
        Profile.objects.create(user=instance)
signals.post_save.connect(create_user_profile, sender=User)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM