Как добавить необходимые данные профиля для системы бронирования - PullRequest
1 голос
/ 22 мая 2019

Я строю систему бронирования в django 2 и python 3, где вы можете арендовать Инструменты.Пользователь зарегистрироваться с именем и фамилией, а также по электронной почте.Я расширил пользовательскую модель django и создал модель под названием «профиль», которая имеет следующие поля:

class Profile(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    birthday = models.DateField(blank=True, null=True)
    matrnr = models.CharField(max_length=6, validators=[MinLengthValidator(6), MaxLengthValidator(6)], default='', blank=True, null=True)
    address = models.CharField(max_length=100, default='', blank=True, null=True)
    city = models.CharField(max_length=50, default='', blank=True, null=True)
    zip = models.CharField(max_length=6, validators=[MinLengthValidator(5), MaxLengthValidator(5)], default='', blank=True, null=True)
    homephone = models.CharField(max_length=15, blank=True, default='', null=True)
    mobilephone = models.CharField(max_length=15, blank=True, default='', null=True)
    id_number = models.CharField(max_length=20, blank=True, default='', null=True)
    driverlicense_number = models.CharField(max_length=20, blank=True, default='', null=True)

Существует страница с заемными инструментами, с кнопкой «Резервировать» рядом с каждым элементом.Если пользователь теперь нажимает на эту кнопку, сначала следует проверить, заполнил ли пользователь данные своего профиля или нет.Если нет, пользователь должен заполнить их, прежде чем он сможет что-то одолжить.

Как мне этого добиться?Я не в курсе, как я новичок.

В этой таблице я перечисляю все инструменты:

{% block title %}Tool List{% endblock %}


{% block content %}

    <p> Here you see all the borrowable tools  </p>




    {% for instance in toollist %}
        <table border="3" cellspacing="5">
          <colgroup>
            <col width="600">
            <col width="100">
            <col width="180">
          </colgroup>
            <tr>
                <td><b>{{ instance.tool_name }}</b></td>
                <td>{{ instance.tool_status }}</td>
                    {% if instance.tool_status == 1 %}
                        <td rowspan="2">
                            {%  if user.is_authenticated %}
                                <a href="{% url 'reservation' %}">Reserve now</a>

                            {% else %}
                                <a href="{% url 'login' %}">Login for reservation</a>
                         </td>
                            {% endif %}
                    {% elif instance.tool_status == 0 %}
                        <td rowspan="2"> Not available </td>
                    {% endif %}
            </tr>
            <tr>
                <td colspan="2">{{ instance.tool_text }}</td>
            </tr>
        </table>
        <br>

Вот мой вид регистрации:

def signup(request):                
        form = SignUpForm(request.POST)
        if form.is_valid():
            user = form.save(commit=False)
            user.is_active = False
            user.save()
            current_site = get_current_site(request)
            subject = 'Bestätige deine Registrierung beim Ausleihsystem'
            message = render_to_string('registration/account_activation_email.html', {
                'user': user,
                'domain': current_site.domain,
                'uid': urlsafe_base64_encode(force_bytes(user.pk)).decode(), 
                'token': account_activation_token.make_token(user),
            })
            from_email = settings.EMAIL_HOST_USER       
            email = form.cleaned_data.get('email')
            recipient_list = [email]
            send_mail(subject, message, from_email, recipient_list, fail_silently=False)
            return redirect('account_activation_sent')
    else:
        form = SignUpForm()
    return render(request, 'registration/signup.html', {'form': form})

def account_activation_sent(request):
    return render(request, 'registration/account_activation_sent.html')


def activate(request, uidb64, token):
    try:                                                
        uid = force_text(urlsafe_base64_decode(uidb64))
        user = User.objects.get(pk=uid)
    except (TypeError, ValueError, OverflowError, User.DoesNotExist):
        user = None

    if user is not None and account_activation_token.check_token(user, token):  
        user.is_active = True
        user.save()
        login(request, user)
        return redirect('home')
    else:
        return render(request, 'registration/account_activation_invalid.html')


def profile(request):
    args = {'user': request.user}
    return render(request, 'registration/profile.html', args)

И это представление edit_profile:

@login_required
@transaction.atomic
def edit_profile(request):
    if request.method == 'POST':
        profile_form = ProfileForm(request.POST, instance=request.user.profile)
        if profile_form.is_valid():
            profile_form.save()
            messages.success(request, _('Your profile was successfully updated!'))
            return redirect('profile')
        else:
            messages.error(request, _('Please correct the error below.'))
    else:
        profile_form = ProfileForm(instance=request.user.profile)
    return render(request, 'registration/edit_profile.html', {
        'profile_form': profile_form
    })
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...