Advertisement
Guest User

Untitled

a guest
Jun 16th, 2019
100
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.42 KB | None | 0 0
  1. INSTALLED_APPS = [
  2. ...
  3.  
  4. 'crispy_forms',
  5. ]
  6.  
  7. CRISPY_TEMPLATE_PACK = 'bootstrap4'
  8.  
  9. from martor.models import MartorField
  10.  
  11. class Post(models.Model):
  12. post_subject = models.CharField(max_length=POST_SUBJECT_SIZE, null=True)
  13. message = MartorField(max_length=MESSAGE_FIELD_SIZE,
  14. help_text=f'Maximum length is {MESSAGE_FIELD_SIZE} characters',
  15. )
  16. topic = models.ForeignKey(Topic, on_delete=models.CASCADE,
  17. related_name='posts')
  18. created_by = models.ForeignKey(User, on_delete=models.CASCADE,
  19. related_name='posts')
  20. created_at = models.DateTimeField(auto_now_add=True)
  21. updated_by = models.ForeignKey(User, on_delete=models.CASCADE,
  22. related_name='+', null=True)
  23. updated_at = models.DateTimeField(null=True)
  24. allowed_editor = models.ManyToManyField(User, blank=True)
  25.  
  26. def __str__(self):
  27. return Truncator(self.post_subject).chars(30)
  28.  
  29. class PostForm(forms.ModelForm):
  30. allowed_editor = forms.ModelMultipleChoiceField(widget=forms.CheckboxSelectMultiple(),
  31. required=False,
  32. label='',
  33. help_text='Selection is not required',
  34. queryset=User.objects.all().order_by('username'))
  35.  
  36. class Meta:
  37. model = Post
  38. fields = ['allowed_editor', 'post_subject', 'message']
  39. labels = {'post_subject': 'Post subject'}
  40.  
  41. @method_decorator(login_required, name='dispatch')
  42. class PostUpdateView(UpdateView):
  43. model = Post
  44. form_class = PostForm
  45. template_name = 'boards/edit_post.html'
  46. pk_url_kwarg = 'post_pk'
  47. context_object_name = 'post'
  48.  
  49. def get_queryset(self):
  50. self.topic = get_object_or_404(Topic,
  51. board__pk=self.kwargs.get('board_pk'),
  52. pk=self.kwargs.get('topic_pk'))
  53. queryset = self.topic.posts.order_by('-updated_at')
  54.  
  55. def form_valid(self, form):
  56. # note if commit=False, then post.save() must be followed by form.save_m2m()
  57. post = form.save(commit=False)
  58. post.updated_by = self.request.user
  59. post.updated_at = timezone.now()
  60. post.save()
  61. form.save_m2m()
  62.  
  63. self.topic.last_updated = post.updated_at
  64. self.topic.save()
  65.  
  66. topic_url = reverse('topic_posts',
  67. kwargs={'board_pk': self.topic.board.pk,
  68. 'topic_pk': self.topic.pk},)
  69. topic_post_url = f'{topic_url}?page={self.topic.get_page_number(post.pk)}'
  70. return redirect(topic_post_url)
  71.  
  72. <button class="btn dropdown-toggle btn-primary btn-sm" data-toggle="dropdown"
  73. >Allowed editors<span class="caret"></span></button>
  74. <ul class="dropdown-menu">
  75. {{ form.allowed_editor|as_crispy_field }}
  76. </ul>
  77.  
  78. {% extends 'base.html' %}
  79.  
  80. {% load static %}
  81. {% load crispy_forms_tags %}
  82.  
  83. {% block title %}Edit post{% endblock %}
  84.  
  85. {% block breadcrumb %}
  86. <ol class="breadcrumb my-4">
  87. <li class="breadcrumb-item"><a href="{% url 'home' %}">Home</a></li>
  88. <li class="breadcrumb-item"><a href="{% url 'boards' %}">Boards</a></li>
  89. <li class="breadcrumb-item"><a href="{% url 'board_topics' post.topic.board.pk %}">{{ post.topic.board.name }}</a></li>
  90. <li class="breadcrumb-item"><a href="{% url 'topic_posts' post.topic.board.pk post.topic.pk %}">{{ post.topic.topic_subject }}</a></li>
  91. <li class="breadcrumb-item active">Edit contribution</li>
  92. </ol>
  93. {% endblock %}
  94.  
  95. {% block content %}
  96. <form method="post" class="mb-4" novalidate>
  97. {% csrf_token %}
  98. <button type="submit" class="btn btn-primary btn-sm">Save changes</button>
  99. <button style="margin:1px" class="btn btn-primary btn-sm"
  100. name="deleted_post_pk" value="{{ post.pk }}"
  101. onclick="return Validate()">Delete contribtion</button>
  102. <button class="btn dropdown-toggle btn-primary btn-sm" data-toggle="dropdown"
  103. >Allowed editors<span class="caret"></span></button>
  104. <ul class="dropdown-menu">
  105. {{ form.allowed_editor|as_crispy_field }}
  106. </ul>
  107. <a href="{% url 'topic_posts' post.topic.board.pk post.topic.pk %}"
  108. class="btn btn-outline-secondary btn-sm"
  109. role="button">Cancel</a>
  110. <br></br>
  111. {{ form.post_subject|as_crispy_field }}
  112. {{ form.message|as_crispy_field }}
  113. </form>
  114. <br>
  115. <br>
  116. {% endblock %}
  117.  
  118. {% block javascript %}
  119. <script src="{% static 'js/board.js' %}"></script>
  120. {% endblock %}
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement