Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #MODELS
- from django.db import models
- class Topic(models.Model):
- name = models.CharField(max_length=200, unique=True)
- def __str__(self):
- return self.name
- class Meta:
- verbose_name_plural ='Topics'
- class Post(models.Model):
- topic = models.ForeignKey(Topic)
- author = models.ForeignKey('auth.user')
- title = models.CharField(max_length=200)
- text = models.TextField()
- created_date = models.DateTimeField(auto_now_add=True)
- def __str__(self):
- return self.title
- #VIEWS
- from django.shortcuts import render, get_object_or_404
- from .models import Post, Topic
- from .forms import PostForm
- from django.shortcuts import redirect
- from django.contrib.auth.decorators import login_required
- from django.contrib.auth import authenticate, login, logout
- from django.http import HttpResponseRedirect
- @login_required
- def topic_list(request):
- topics = Topic.objects.all()
- return render(request, 'blog/topic_list.html', {'topics': topics})
- @login_required
- def post_list(request, pk):
- topic = get_object_or_404(Topic, pk=pk)
- posts = Post.objects.filter(topic_id=pk).order_by('-created_date')
- return render(request, 'blog/post_list.html', {'posts': posts, 'topic': topic})
- @login_required
- def post_detail(request, pk):
- post = get_object_or_404(Post,pk=pk)
- return render(request, 'blog/post_detail.html', {'post': post})
- @login_required
- def post_new(request):
- if request.method == "POST":
- form = PostForm(request.POST)
- #topic_form = TopicForm(request.POST)
- if form.is_valid():
- post = form.save(commit=False)
- post.author = request.user
- topic = form.cleaned_data.get('topic')
- post.topic_id = topic.id
- post.save()
- return redirect('post_detail', pk=post.pk)
- else:
- form = PostForm()
- #topic_form = TopicForm()
- return render(request, 'blog/post_edit.html', {'form': form})
- @login_required
- def post_edit(request, pk):
- post = get_object_or_404(Post, pk=pk)
- #topic = get_object_or_404(Topic, pk=post.topic_id)
- if request.method == "POST":
- form = PostForm(request.POST, instance=post)
- #topic_form = TopicForm(request.POST, instance=topic)
- if form.is_valid():
- post = form.save(commit=False)
- post.author = request.user
- topic = form.cleaned_data.get('topic')
- post.topic_id = topic.id
- post.save()
- return redirect('post_detail', pk=post.pk)
- else:
- form = PostForm(instance=post)
- return render(request, 'blog/post_edit.html', {'form': form})
- @login_required
- def post_remove(request, pk):
- post = get_object_or_404(Post, pk=pk)
- topic = get_object_or_404(Topic, pk=post.topic_id)
- post.delete()
- print(topic.id)
- return redirect('post_list', pk=topic.id)
- def user_login(request):
- if request.method == 'POST':
- username = request.POST.get('username')
- password = request.POST.get('password')
- user = authenticate(username=username, password=password)
- if user:
- if user.is_active:
- login(request, user)
- return HttpResponseRedirect('/')
- else:
- print("Your Rango account is disabled.")
- else:
- print("Invalid login details:", username, password)
- return HttpResponse("Invalid login details supplied.")
- else:
- return render(request, 'blog/login.html', {})
- def user_logout(request):
- logout(request)
- return HttpResponseRedirect('')
- #FORMS
- from django import forms
- from .models import Post, Topic
- class PostForm(forms.ModelForm):
- class Meta:
- model = Post
- fields = ['topic', 'title', 'text',]
- def __init__(self, *args, **kwargs):
- super(PostForm, self).__init__(*args, **kwargs)
- self.fields['topic'] = forms.ModelChoiceField(queryset=Topic.objects.all())
Add Comment
Please, Sign In to add comment