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.