Почему атрибут модели экземпляра не меняется - PullRequest
0 голосов
/ 21 апреля 2019

Я создаю финансового менеджера, и мне нужно, чтобы пользователь изменил активность учетной записи (укажите активную учетную запись или нет), но когда я отправляю форму для изменения, атрибут модели не изменяется и всегда остается ИСТИНА

Я также пытался сделать это с помощью копии Учетной записи, но это также не было результатом результата Account.objects.get (user = self.request.user, id = id) .is_active = False

models.py

class Account(models.Model):
    type_of_currency = models.CharField(max_length=20)
    user = models.ForeignKey(get_user_model(), blank=True,
                             related_name='user_account',
                             on_delete=models.CASCADE)
    count = models.DecimalField(max_digits=12, decimal_places=2, blank=True)
    created = models.DateTimeField(default=datetime.datetime.now)
    is_active = models.BooleanField()

    def __str__(self):
        return f'{self.type_of_currency} - {self.count}'

views.py

class AccountDetailView(DetailView, UpdateView):
    model = Account
    form_class = AccountCreateForm
    template_name = 'account_detail.html'

    def post(self, request, *args, **kwargs):
        id = self.request.POST['accountid']  
        self.request.user.user_account.get(id=6).is_active = False
        print(self.request.user.user_account.get(
            id=id).is_active)  # always True why?
        return redirect('/counts/' + id)

шаблон

{% extends 'base.html' %}
{% block content %}
    <div class="col-sm-5">
        <h1>account: {{ account.id }}</h1>

        <p><strong>Author:</strong> {{ account.user }}</p> <!-- author detail link not yet defined -->
        <p><strong>Type:</strong> {{ account.type_of_currency }}</p>
        <p><strong>count:</strong> {{ account.count }}</p>
        <p><strong>IsCreated:</strong> {{ account.created }}</p>
        <p><strong>IsActive:</strong>{{ account.is_active }}</p>
        <a class="btn btn-outline-primary"
           href="{% url 'account-list' %}">Back</a>
        {% if account.is_active %}
            <form method="post">
                {% csrf_token %}
                <input type="hidden" value="{{ account.id }}" name="accountid">
                <button type="submit" class="btn btn-outline-danger">Deactivate</button>
            </form>
        {% else %}
            <form method="post">
                {% csrf_token %}

                <button type="submit" class="btn btn-outline-success">Activate</button>
            </form>
        {% endif %}
    </div>
{% endblock %}

В методе сообщения DetailViews я ожидаю, что после нажатия кнопки активность пользователя изменится, но результат всегда будет True

1 Ответ

1 голос
/ 21 апреля 2019

Вы никогда не вносите изменения в БД.

Кроме того, я бы не использовал следующий синтаксис: self.request.user.user_account.get(id=6).is_active = False

Вы можете попробовать: self.request.user.user_acocount.filter(id=6).update(is_active=False)

Но, если вы мертвый набор при использовании .get():

user_acc = self.request.user.user_account.get(id=6)
user_acc.is_active = False
user_acc.save()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...