鱼C论坛

 找回密码
 立即注册
查看: 1649|回复: 2

python新手,按Django by example上的例子,一直出错,帮看看,谢谢!

[复制链接]
发表于 2017-12-20 19:01:12 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 c21h23no5 于 2017-12-20 22:44 编辑

例子是Django By Example上的。我在Mac Python3.6 Django2.0的环境下运行出错。

blog/models.py内代码:

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


class Post(models.Model):
    STATUS_CHOICES = (
        ('draft', 'Draft'),
        ('published', 'Published'),
    )
    title = models.CharField(max_length=250)
    slug = models.SlugField(max_length=250,
                            unique_for_date='publish')
    author = models.ForeignKey(User,
                                related_name='blog_posts')
    body = models.TextField()
    publish = models.DateTimeField(default=timezone.now)
    created = models.DateTimeField(auto_now_add=True)
    updated = models.DateTimeField(auto_now=True)
    status = models.CharField(max_length=10,
                                choices=STATUS_CHOICES,
                                default='draft')
                           
    class Meta:
        ordering = ('-publish',)
               
    def __str__(self):
        return self.title

setting.py中添加了blog

INSTALLED_APPS = [
    'blog',
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
]

运行 python manage.py makemigrations blog时出错:

(PythonL) jundeMacBook:mysite lijun$ python manage.py makemigrations blog
Traceback (most recent call last):
  File "manage.py", line 15, in <module>
    execute_from_command_line(sys.argv)
  File "/Users/jun/PythonL/lib/python3.6/site-packages/django/core/management/__init__.py", line 371, in execute_from_command_line
    utility.execute()
  File "/Users/jun/PythonL/lib/python3.6/site-packages/django/core/management/__init__.py", line 347, in execute
    django.setup()
  File "/Users/jun/PythonL/lib/python3.6/site-packages/django/__init__.py", line 24, in setup
    apps.populate(settings.INSTALLED_APPS)
  File "/Users/jun/PythonL/lib/python3.6/site-packages/django/apps/registry.py", line 112, in populate
    app_config.import_models()
  File "/Users/jun/PythonL/lib/python3.6/site-packages/django/apps/config.py", line 198, in import_models
    self.models_module = import_module(models_module_name)
  File "/Users/jun/PythonL/lib/python3.6/importlib/__init__.py", line 126, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "<frozen importlib._bootstrap>", line 978, in _gcd_import
  File "<frozen importlib._bootstrap>", line 961, in _find_and_load
  File "<frozen importlib._bootstrap>", line 950, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 655, in _load_unlocked
  File "<frozen importlib._bootstrap_external>", line 678, in exec_module
  File "<frozen importlib._bootstrap>", line 205, in _call_with_frames_removed
  File "/Users/jun/PythonL/bin/mysite/blog/models.py", line 6, in <module>
    class Post(models.Model):
  File "/Users/jun/PythonL/bin/mysite/blog/models.py", line 15, in Post
    related_name='blog_posts')
TypeError: __init__() missing 1 required positional argument: 'on_delete'

帮看看,要怎么修改,代码都是从书上复制过去的。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2017-12-20 20:01:50 | 显示全部楼层
django2.0啊,用那么新,建议你用个书同个版本,看报错说少了参数
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-12-20 22:37:29 | 显示全部楼层
目前找到错误,
应该是在 author = models.ForeignKey(User, related_name='blog_posts') 这里出问题。
Mac上一更新就是2.0了。

打字的时候发现解决了:
Django 2.0 在创建外键时需要在后面加上on_delete
理论上应该是修改成author = models.ForeignKey(User, related_name='blog_posts',on_delete=models.CASCADE)
&#160;我试试。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2026-3-4 23:12

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表