2017-01-06 3 views
-1

дает пользователям возможность публиковать тему. Это будет требует атрибута public в качестве части модели темы (по умолчанию это должно быть установлено значение False) и элемент формы на странице new_topic, который позволяет пользователю изменять тему от частного к публичному [введите ссылку здесь] [1]Добавление публичного атрибута в модели Django

from django.db import models 
from django.contrib.auth.models import User 

class Topic(models.Model): 
    """A topic the user is learning about.""" 
    text = models.CharField(max_length=200) 
    date_added = models.DateTimeField(auto_now_add=True) 
    owner = models.ForeignKey(User) 

    def __str__(self): 
     """Return a string representation of the model.""" 
     return self.text 

class Entry(models.Model): 
    """Something specific learned about a topic.""" 
    topic = models.ForeignKey(Topic) 
    text = models.TextField() 
    date_added = models.DateTimeField(auto_now_add=True) 

    class Meta: 
     verbose_name_plural = 'entries' 

    def __str__(self): 
     """Return a string representation of the model.""" 
     return self.text[:50] + "..."enter code here 
+1

Что вопрос? –

+0

Добавление атрибута public в модели темы и его необходимо настроить False по умолчанию! –

+0

Ниже приведена E-страница номер страницы 382 упражнение 20-5 https://github.com/ehmatthes/pcc/blob/master/chapter_20/learning_logs/models.py –

ответ

-1

Я также застрял в этом пункте. У меня есть решение для элемента формы на шаблоне. Я реализовал это, как флажок:

new_topic.html

<label><input type="checkbox" name="public"/> Public</label> 

Я редактировал forms.py путем добавления мета атрибут общественного:

forms.py

class TopicForm(forms.ModelForm): 
    class Meta: 
     model = Topic 
     fields = ['text'] 
     labels = {'text': ''} 
     public = forms.BooleanField(required=False) 

и в views.py под new_topic функцией я добавил check для checkbox:

@login_required 
def new_topic(request): 
    """Add a new topic.""" 
    if request.method != 'POST': 
     # No data submitted; create a blank form. 
     form = TopicForm() 
    else: 
     # POST data submitted; process data. 
     form = TopicForm(request.POST) 
     if form.is_valid(): 
      new_topic = form.save(commit=False) 
      new_topic.owner = request.user 
      if request.POST["public"]: 
       new_topic.public = True 
      new_topic.save() 
      return HttpResponseRedirect(reverse('learning_logs:topics')) 

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

При нажатии на галочку атрибут public правильно изменяется на true, но я не могу переопределить @login_required для этой темы. Если быть точным, вновь созданная тема не становится общедоступной. Поэтому было бы здорово, если бы кто-то решение по этому вопросу

+0

Это действительно сложнее, чем нужно. Пожалуйста, см. Мой ответ. –

0

Вы можете просто добавить его в качестве поля на вашей Topic модели:

public = models.BooleanField(default=False)

Затем добавить его в список полей вашей TopicForm и она будет оказана в форме автоматически:

fields = ['text', 'public']

Смежные вопросы