Django - Как я могу "обновить" тип пользователя?

У меня есть две модели, Покупатель и Торговец, причем тип пользователя по умолчанию после создания учетной записи - Покупатель.

# Abstract User
class User(AbstractUser):
    is_buyer = models.BooleanField(default=False)
    is_merchant = models.BooleanField(default=False)
    date_created = models.DateTimeField(default=timezone.now)


# Buyer
class Buyer(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE, primary_key=True)
    pin = models.CharField(max_length=6, blank=True)
    items = models.ManyToManyField(Product, blank=True)

    # items = models.ManyToManyField(Product, blank=True)

    def __str__(self):
        return f'{self.user.username}'


# Merchant
class Merchant(models.Model):  # items
    user = models.OneToOneField(User, on_delete=models.CASCADE, primary_key=True)
    pgp = models.CharField(max_length=150, blank=True)
    # image = models.ImageField(default='default.jpg', upload_to='profile_pics')

    def __str__(self):
        return f'{self.user.username}'

У меня есть шаблон become-a-merchant.html, в котором я хочу сделать так, чтобы покупатель мог стать продавцом после установки флажка и нажатия кнопки.

{% extends 'base.html' %}

{% block content %}
<input type="checkbox" name="checkbox" value="check">
<label for="checkbox">Become a merchant.</label>
<br><br>
<button type="submit">Upgrade</button>
{% endblock %}

Я не знаю, какой тип представления использовать или как сделать форму, которая повышает тип пользователя.

Вы предоставили слишком мало информации о том, с помощью чего вы это делаете: function или generic class. Также, у меня есть ощущение, что вам не нужно делать так много classes, если вы используете flags в пользователе. Если это generic class, то вам нужно будет обновить класс User таким образом.

from django.views.generic.edit import UpdateView
from .models import User # or other location

# model
class UserUpdateView(UpdateView):
    model = User
    fields = ['is_buyer, is_merchant']

# template
{% extends 'base.html' %}
{% block content %}
<form method="post">{% csrf_token %}
    {{ form.as_p }}
    <input type="submit" value="Update">
</form>
{% endblock %}

Также проверьте docs.

Вернуться на верх