【问题标题】:AttributeError: 'FileField' object has no attribute 'model'AttributeError:“FileField”对象没有属性“模型”
【发布时间】:2017-02-20 07:28:17
【问题描述】:

我得到 AttributeError: 'FileField' object has no attribute 'model' 每当我运行 python manage.py makemigrations 和 python manage.py migrate 请参阅下面的 model.py 和我运行 migrate 时的最后一个迁移文件

迁移:0014_slider_slider 标题

class Migration(migrations.Migration):

dependencies = [
    ('shops', '0013_auto_20170219_2049'),
]

operations = [
    migrations.AddField(
        model_name='slider',
        name='Slider Title',
        field=models.CharField(default=models.FileField(blank=True, null=True, upload_to=b''), max_length=20),
    ),
]

迁移的输出

Operations to perform:
Apply all migrations: admin, auth, contenttypes, sessions, shops
Running migrations:
Applying shops.0014_slider_slider title...Traceback (most recent call last):
File "manage.py", line 22, in <module>
execute_from_command_line(sys.argv)
File "/usr/local/lib/python2.7/dist-packages/django/core/management/__init__.py", line 367, in execute_from_command_line
utility.execute()
File "/usr/local/lib/python2.7/dist-packages/django/core/management/__init__.py", line 359, in execute
self.fetch_command(subcommand).run_from_argv(self.argv)
File "/usr/local/lib/python2.7/dist-packages/django/core/management/base.py", line 294, in run_from_argv

self.execute(*args, **cmd_options)
File "/usr/local/lib/python2.7/dist-packages/django/core/management/base.py", line 345, in execute
output = self.handle(*args, **options)
File "/usr/local/lib/python2.7/dist-packages/django/core/management/commands/migrate.py", line 204, in handle
fake_initial=fake_initial,
File "/usr/local/lib/python2.7/dist-packages/django/db/migrations/executor.py", line 115, in migrate
state = self._migrate_all_forwards(state, plan, full_plan, fake=fake, fake_initial=fake_initial)
File "/usr/local/lib/python2.7/dist-packages/django/db/migrations/executor.py", line 145, in _migrate_all_forwards
state = self.apply_migration(state, migration, fake=fake, fake_initial=fake_initial)
File "/usr/local/lib/python2.7/dist-packages/django/db/migrations/executor.py", line 244, in apply_migration
state = migration.apply(state, schema_editor)
File "/usr/local/lib/python2.7/dist-packages/django/db/migrations/migration.py", line 129, in apply
operation.database_forwards(self.app_label, schema_editor, old_state, project_state)
File "/usr/local/lib/python2.7/dist-packages/django/db/migrations/operations/fields.py", line 84, in database_forwards
field,
File "/usr/local/lib/python2.7/dist-packages/django/db/backends/mysql/schema.py", line 43, in add_field
super(DatabaseSchemaEditor, self).add_field(model, field)
File "/usr/local/lib/python2.7/dist-packages/django/db/backends/base/schema.py", line 395, in add_field
definition, params = self.column_sql(model, field, include_default=True)
File "/usr/local/lib/python2.7/dist-packages/django/db/backends/base/schema.py", line 147, in column_sql
default_value = self.effective_default(field)
File "/usr/local/lib/python2.7/dist-packages/django/db/backends/base/schema.py", line 221, in effective_default
default = field.get_db_prep_save(default, self.connection)
File "/usr/local/lib/python2.7/dist-packages/django/db/models/fields/__init__.py", line 755, in get_db_prep_save
prepared=False)
File "/usr/local/lib/python2.7/dist-packages/django/db/models/fields/__init__.py", line 747, in get_db_prep_value
value = self.get_prep_value(value)
File "/usr/local/lib/python2.7/dist-packages/django/db/models/fields/__init__.py", line 1081, in get_prep_value
return self.to_python(value)
File "/usr/local/lib/python2.7/dist-packages/django/db/models/fields/__init__.py", line 1077, in to_python
return smart_text(value)
File "/usr/local/lib/python2.7/dist-packages/django/utils/encoding.py", line 41, in smart_text
return force_text(s, encoding, strings_only, errors)
File "/usr/local/lib/python2.7/dist-packages/django/utils/encoding.py", line 78, in force_text
s = six.text_type(s)
File "/usr/local/lib/python2.7/dist-packages/django/db/models/fields/__init__.py", line 188, in __str__
model = self.model
AttributeError: 'FileField' object has no attribute 'model'

模型.py

from __future__ import unicode_literals
from django.db import models


#Create your models here.

class Slider(models.Model):
    slider = models.FileField()
    slider_title = models.CharField(max_length=20)
    def __str__(self):
        return self.slider_title


class ShopCategories(models.Model):
    category = models.CharField(max_length=50, unique=True)
    def __str__(self):
        return self.category


class NewShop(models.Model):
    category = models.ForeignKey(ShopCategories)
    main_image = models.FileField()
    name = models.CharField(max_length=100, unique=True)
    tagline = models.CharField(max_length=50, default='Enter tagline here2')
    description = models.TextField(default='enter shop description')
    shop_image = models.FileField()
    def __str__(self):
        return  self.name

【问题讨论】:

  • 您的问题似乎出在迁移文件中,而不是您的模型中(请包括在您运行 migrate 时最后引用的迁移文件)
  • @Sayse .. 请立即查看
  • 能否请您包括堆栈跟踪和运行迁移的输出?
  • @Sayse 我已经更新了堆栈跟踪。请问“输出”是什么意思。抱歉,我对编程还是比较陌生
  • 该堆栈跟踪与您问题中的错误有关...当您运行迁移时,屏幕上会出现大量文本(输出)

标签: django python-2.7 django-models django-views


【解决方案1】:

由于某种原因,您已将另一种字段类型指定为我怀疑是否会起作用的 charfield 的默认值,只需将其更改为 char 字段的更好默认值

operations = [
    migrations.AddField(
        model_name='slider',
        name='Slider Title',
        field=models.CharField(default='', max_length=20),
    ),
]

【讨论】:

    【解决方案2】:

    因为您拥有的大多数 FileField 对象都是图像,所以 Django 的 ImageField 将是比 Filefield 更好的选择。检查docs

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-06-12
      • 2015-04-28
      • 2021-10-20
      • 2019-05-11
      • 2020-09-14
      • 1970-01-01
      • 1970-01-01
      • 2010-10-02
      相关资源
      最近更新 更多