【问题标题】:Django - How can I "upgrade" user type?Django - 我如何“升级”用户类型?
【发布时间】:2022-08-07 02:26:37
【问题描述】:

我有两个模型,Buyer 和 Merchant,创建帐户后的默认用户类型是 Buyer。

# 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 %}

我怎样才能做一个升级我的用户类型的表单。

    标签: django django-templates django-users


    【解决方案1】:

    您提交的信息太少,说明您是使用function 还是generic class 处理此问题。另外,如果您在用户中使用flags,我觉得您不需要做这么多classes。如果是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

    【讨论】:

    • 我收到为用户错误指定的未知字段(is_buyer、is_merchant)。然后将字段编辑为 fields = ['is_buyer', 'is_merchant']。
    • 这些字段不可能是未知的。你一定在某个地方犯了错误。确保正确包含from .models import User # or other location。如果它仍然不起作用,请包含代码和屏幕截图。
    猜你喜欢
    • 1970-01-01
    • 2013-05-12
    • 1970-01-01
    • 1970-01-01
    • 2018-08-01
    • 1970-01-01
    • 2016-06-18
    • 2021-09-08
    • 1970-01-01
    相关资源
    最近更新 更多