You are trying to add a non-nullable field 'author' to post without a default; we can't do that (the database needs
something to populate existing rows).
Please select a fix:
1) Provide a one-off default now (will be set on all existing rows with a null value for this column)
2) Quit, and let me add a default in models.py
Select an option:
Please enter the default value now, as valid Python
The datetime and django.utils.timezone modules are available, so you can do e.g. timezone.now
Type 'exit' to exit this prompt
>>> 1
from django.contrib.auth.models import User
class TestView(TestCase):
def setUp(self):
self.client = Client()
self.user_trump = User.object.create_user(
username='trump',
password='somepassword'
)
self.user_obama = User.object.create_user(
username='obama',
password='somepassword'
)
class Category(models.Model):
name = models.CharField(max_length=50, unique=True)
slug = models.SlugField(max_length=200, unique=True, allow_unicode=True)
def __str__(self):
return self.name
class Meta:
verbose_name_plural = 'Categories'
from django.contrib import admin
from .models import Post, Category
admin.site.register(Post)
class CategoryAdmin(admin.ModelAdmin):
prepopulated_fields = {'slug': ('name',)}
admin.site.register(Category, CategoryAdmin)
python manage.py shell
Type "help", "copyright", "credits" or "license" for more information.
(InteractiveConsole)
>>> from blog.models import Post, Category
>>> Post.objects.count()
5
>>> Category.objects.count()
4
>>> for p in Post.objects.all():
... print(p)
...
1 new post :: bini
2 second post :: mini
3 third post :: mini
4 Meteor :: mini
5 여름이 오면 서핑을 하고싶어요 :: bini
>>> for c in Category.objects.all():
... print(c)
...
programming
culture&art
game
entertainment
In [5]: category_programming = Category.objects.get(slug='programming')
In [6]: category_programming
Out[6]: <Category: programming>
In [7]: category_programming = Category.objects.get(name__startswith='c')
In [8]: category_programming
Out[8]: <Category: culture&art>
In [9]: for p in category_programming.post_set.all():
...: print(p)
...:
5 여름이 오면 서핑을 하고싶어요 :: bini
class TestView(TestCase):
def setUp(self):
self.client = Client()
self.user_trump = User.objects.create_user(
username='trump',
password='somepassword'
)
self.user_obama = User.objects.create_user(
username='obama',
password='somepassword'
)
self.category_programming = Category.objects.create(
name='programming',
slug='programming'
)
self.category_music = Category.objects.create(
name='music',
slug='music'
)
self.post_001 = Post.objects.create(
title='첫번째 포스트 입니다.',
content='Hello, World. We are the World.',
author=self.user_trump,
category=self.category_programming,
)
self.post_002 = Post.objects.create(
title='두번째 포스트 입니다.',
content='안녕 여러분, 나도 여러분의 일부야.',
author=self.user_obama,
category=self.category_music,
)
self.post_003 = Post.objects.create(
title='세번째 포스트 입니다.',
content='카테고리 없어.',
author=self.user_obama,
)