Django2 - автоматически назначать определенную сумму криптовалюты для регистрации пользователя - PullRequest
0 голосов
/ 10 мая 2018

Доброе утро,

В настоящее время мы работаем над школьным проектом, в рамках которого нам необходимо построить собственный рынок криптовалют. Пока все хорошо.

Теперь, когда пользователь регистрируется / регистрируется на нашем сайте, он автоматически получает определенную сумму одной конкретной криптовалюты. Это считается транзакцией между Банком и созданным пользователем.

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

Большое спасибо за помощь

Наша регистрационная форма в views.py

#signup form
def signup(request):
    if request.method =='POST':
        form = SignUpForm(request.POST)
        if form.is_valid():
            form.save()
            #We want to log in the user after his sign up
            username = form.cleaned_data.get('username')
            raw_password = form.cleaned_data.get('password1')
            user = authenticate(username=username, password=raw_password)
            login(request, user)
            return redirect('/')
    else:
        form = SignUpForm()
    return render(request, 'sign-up.html', {'SignUpForm': form})

Наша модель транзакции. Мы используем модель пользователя django

class Transaction(models.Model):
    listing_id = models.ForeignKey(Listing, on_delete=models.CASCADE, null=True, blank=True)
    created_at = models.DateTimeField(auto_now_add = True)
    exchange_amount = models.IntegerField(null=True)
    user_debit = models.ForeignKey(User, on_delete=models.CASCADE, related_name='user_debit', null=True)
    user_credit = models.ForeignKey(User, on_delete=models.CASCADE, related_name='user_credit', null=True)
    currency_id = models.ForeignKey(Currency, on_delete=models.CASCADE, null=True)

1 Ответ

0 голосов
/ 10 мая 2018

Просто создайте транзакцию при регистрации.Я предполагаю, что банк также является (валютно-зависимым?) Пользователем, скажем, с id = 1.Тогда что-то вроде

from django.db import transaction

#signup form
def signup(request):
    if request.method =='POST':
        form = SignUpForm(request.POST)
        if form.is_valid():
            #atomic makes sure that the changes are only commited if the entire block of code is succesfully completed
            with transaction.atomic():
                new_user = form.save()
                transaction_signup = Transaction(
                    user_debit = new_user,
                    user_credit = get_user_model().objects.get(id=1),
                    exchange_amount = 1,
                    currency_id = Curreny.objects.get(id=3)
                )
                transaction_signup.save()
                #We want to log in the user after his sign up
                username = form.cleaned_data.get('username')
                raw_password = form.cleaned_data.get('password1')
                user = authenticate(username=username, password=raw_password)
                login(request, user)
                return redirect('/')
    else:
        form = SignUpForm()
    return render(request, 'sign-up.html', {'SignUpForm': form})

будет работать.Однако вы НЕ ДОЛЖНЫ делать это по вашему мнению.Например, вы можете использовать сигналы сохранения после записи .

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