Могу ли я изменить атрибут класса модели логического типа (и другие атрибуты, которые не являются полями)? - PullRequest
0 голосов
/ 20 января 2019

Я немного изучил Django, используя «Курс Python Crash» Эрика Мэттса *, и наткнулся на следующую проблему. А именно, у меня был этот код:

class Topic(models.Model):
    text = models.CharField(max_length=200)
    public = models.BooleanField(default=False)
    public_2 = False

    def __str__(self):
        return self.text

Тогда в функции просмотра, если я установлю public = True и public_2 = True, проверяя в оболочке, у меня будет topic.public = True, но public_2 = False. Почему это так, и есть ли способ изменить атрибут public_2? Вот функция просмотра:

def new_entry(request, topic_id):
    topic = get_object_or_404(Topic, id=topic_id)
    if topic.owner != request.user:
        raise Http404

    if request.method != 'POST':
        # No data submitted; create a blank form.
        form = EntryForm()
    else:
        # POST data submitted; process data
        form = EntryForm(data=request.POST)
        if form.is_valid():
            new_entry = form.save(commit=False)
            new_entry.topic = topic
            new_entry.public = True
            new_entry.public_2 = True
            new_entry.save()
            return HttpResponseRedirect(reverse('learning_logs:topic',
                                                args=[topic_id]))

    context = {'topic': topic, 'form': form}
    return render(request, 'learning_logs/new_entry.html', context)

Если нет способа изменить это, есть ли другие ограничения в отношении того, какие типы атрибутов класса Model могут быть изменены?

...