создание пользовательских профилей для выбранных типов пользователей - PullRequest
0 голосов
/ 19 июня 2019

1.У меня есть несколько пользователей в моем проекте. Я создал одну страницу регистрации. на странице регистрации у меня есть возможность выбрать тип пользователя. На основе выбора должен быть создан связанный профиль, и тип пользователя должен быть зарегистрирован в своей странице профиля .. например .. если тип выбранного пользователя student, то после регистрации должен быть создан файл student_profile, в который должен быть зачислен учащийся .. аналогично для профессиональных и других типов пользователей. Я использовал модель пользователя django auth для создания регистрации. 2. У меня есть много пользовательских форм профиля для каждого типа пользователей, и я не знаю, как его интегрировать .. Модель ниже: то, что

Пожалуйста, не предлагайте мне эту ссылку, потому что я не хочу использовать этот подход, так как они используют регистрацию для каждого типа пользователя, но у меня есть только одна регистрация для каждого типа пользователя. https://simpleisbetterthancomplex.com/tutorial/2018/01/18/how-to-implement-multiple-user-types-with-django.html

регистрация пользователя в forms.py:

   class UserRegistrationForm(forms.ModelForm):
    password = forms.CharField(label='Password',
                               widget=forms.PasswordInput)
    password2 = forms.CharField(label='Repeat password',
                                widget=forms.PasswordInput)
    class Meta:


    model = User
    fields = ('username', 'first_name', 'email')

def clean_password2(self):
    cd = self.cleaned_data
    if cd['password'] != cd['password2']:
        raise forms.ValidationError('Passwords don\'t match.')
    return cd['password2']

def clean_email(self):
    email = self.cleaned_data.get('email')
    username = self.cleaned_data.get('username')
    if email and User.objects.filter(email=email).exclude(username=username).exists():
        raise forms.ValidationError(u'Email addresses must be unique.')
    return email

views.py:

@login_required
def dashboard(request):
    # Display all actions by default
    actions = Action.objects.exclude(user=request.user)
    following_ids = request.user.following.values_list('id',
                                                       flat=True)
    if following_ids:
        # If user is following others, retrieve only their actions
        actions = actions.filter(user_id__in=following_ids)
    actions = actions.select_related('user', 'user__profile')\
                     .prefetch_related('target')[:10]

    return render(request,
                  'account/dashboard.html',
                  {'section': 'dashboard',
                   'actions': actions})


def register(request):
    if request.method == 'POST':
        user_form = UserRegistrationForm(request.POST)
        if user_form.is_valid():
            # Create a new user object but avoid saving it yet
            new_user = user_form.save(commit=False)
            # Set the chosen password
            new_user.set_password(
                user_form.cleaned_data['password'])
            # Save the User object
            new_user.save()
            # Create the user profile
            Profile.objects.create(user=new_user)
            create_action(new_user, 'has created an account')
            return render(request,
                          'account/register_done.html',
                          {'new_user': new_user})
    else:
        user_form = UserRegistrationForm()
    return render(request,
                  'account/register.html',
                  {'user_form': user_form})

Это анкета студента для учебы, учебного заведения, достижений и т. Д. В приложении для учащихся:

# models.py (приложение для студентов):

class student(User):
 is_student = models.BooleanField(default=False)
    class academic(models.Model):
         student = models.OneToOneField(student, on_delete=models.CASCADE, primary_key=True)
         add_college=models.ForeignKey(college,db_index=True,on_delete=models.CASCADE)
         add_book=models.ForeignKey(book,db_index=True,on_delete=models.CASCADE)
         skills=models.CharField(max_length=30)
         favourite_subject=models.CharField(max_length=30)
         strong_sbject=models.CharField(max_length=30)
         weak_subject=models.CharField(max_length=30)
         fields_interested=models.CharField(max_length=30)
         motivation=models.CharField(max_length=30)



    class campus(models.Model):
         student=models.OneToOneField(student,on_delete=models.CASCADE,primary_key=True)
         endorsement=models.CharField(max_length=50)
         membership=models.CharField(max_length=50)

и у нас есть другие формы для целей и достижений .. так же у меня есть несколько форм профиля для других типов пользователей ..

Теперь мое требование заключается в том, чтобы на основе типа пользователя, выбранного во время регистрации, такого как студент, необходимо было создать профиль студента вместе с вышеупомянутыми формами профилей. Каков наилучший подход ?? я нигде не могу найти правильного решения в интернете .. почесывая голову уже 2 месяца для этой конкретной проблемы .. любое решение должно быть высоко оценено !!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...