python - 本地字段与类似名称的字段发生冲突

标签 python django django-models

我正在尝试添加一个新的数据库模型,让我可以“分组”费用,但在运行 python manage.py makemigrations 时遇到了这个问题

我的虚拟环境如下所示:

Django==1.7.3
argparse==1.2.1
django-braces==1.4.0
django-chartit==0.1
django-crispy-forms==1.4.0
django-debug-toolbar==1.2.2
psycopg2==2.6
six==1.9.0
sqlparse==0.1.14
wsgiref==0.1.2

这是回溯:

    Traceback (most recent call last):
  File "manage.py", line 10, in <module>
    execute_from_command_line(sys.argv)
  File "/home/jeff/.virtualenvs/ggc/local/lib/python2.7/site-packages/django/core/management/__init__.py", line 385, in execute_from_command_line
    utility.execute()
  File "/home/jeff/.virtualenvs/ggc/local/lib/python2.7/site-packages/django/core/management/__init__.py", line 377, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "/home/jeff/.virtualenvs/ggc/local/lib/python2.7/site-packages/django/core/management/base.py", line 288, in run_from_argv
    self.execute(*args, **options.__dict__)
  File "/home/jeff/.virtualenvs/ggc/local/lib/python2.7/site-packages/django/core/management/base.py", line 338, in execute
    output = self.handle(*args, **options)
  File "/home/jeff/.virtualenvs/ggc/local/lib/python2.7/site-packages/django/core/management/commands/makemigrations.py", line 111, in handle
    convert_apps=app_labels or None,
  File "/home/jeff/.virtualenvs/ggc/local/lib/python2.7/site-packages/django/db/migrations/autodetector.py", line 42, in changes
    changes = self._detect_changes(convert_apps, graph)
  File "/home/jeff/.virtualenvs/ggc/local/lib/python2.7/site-packages/django/db/migrations/autodetector.py", line 109, in _detect_changes
    self.old_apps = self.from_state.render(ignore_swappable=True)
  File "/home/jeff/.virtualenvs/ggc/local/lib/python2.7/site-packages/django/db/migrations/state.py", line 67, in render
    model.render(self.apps)
  File "/home/jeff/.virtualenvs/ggc/local/lib/python2.7/site-packages/django/db/migrations/state.py", line 316, in render
    body,
  File "/home/jeff/.virtualenvs/ggc/local/lib/python2.7/site-packages/django/db/models/base.py", line 229, in __new__
    'base class %r' % (field.name, name, base.__name__)
django.core.exceptions.FieldError: Local field u'id' in class 'ExpenseGroup' clashes with field of similar name from base class 'Asset

'

这是模型代码 - 我尝试将 ExpenseGroup 模型缩减为仅将 groupName 作为字段,但出现了相同的错误。我错过了什么?

    class Asset(TimeStampedModel):
        assetName    = models.CharField(max_length=255)
        assetAddress = models.CharField(max_length=255)
        slug         = models.SlugField(max_length=255, blank=True)

        class Meta:
            unique_together = ('assetName', 'assetAddress')

        def __str__(self):
            return self.assetName

        def save(self, *args, **kwargs):
            self.slug = slugify(self.assetName)
            super(Asset, self).save(*args, **kwargs)


class ExpenseGroup(TimeStampedModel):
    groupName          = models.CharField(max_length=255, blank=False)
    expenseName        = models.ForeignKey(Expense, related_name='expenseGroup')

    class Meta:
        unique_together = ('expenseName', 'groupName')

    def __str__(self):
        return self.groupName

    def save(self, *args, **kwargs):
        return super(ExpenseGroup, self).save(*args, **kwargs)



class Expense(TimeStampedModel):
    assetName          = models.ForeignKey(Asset, related_name='assetExpense')
    category           = models.ForeignKey(ExpenseCategory, related_name='expenseCategory')
    expensePeriod      = models.DateTimeField(blank=False)
    expenseName        = models.CharField(max_length=255, blank=False)
    expenseAmount      = models.DecimalField(max_digits=20, decimal_places=2, blank=True)

    class Meta:
        unique_together = ('expenseName', 'expensePeriod')

    def __str__(self):
        return self.expenseName

    def save(self, *args, **kwargs):
        super(Expense, self).save(*args, **kwargs)

最佳答案

您可以发布 TimeStampedModel 定义吗?我怀疑您没有将基本模型声明为 Abstract。这就是“id”字段相互冲突的原因。

class TimeStampedModel(models.Model):

    created = models.DateTimeField(auto_now_add=True)
    modified = models.DateTimeField(auto_now=True)

    class Meta:
        abstract = True

关于python - 本地字段与类似名称的字段发生冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28662686/

相关文章:

python - 在打包的 Electron 应用程序中包含 python 脚本

python - 如何隔离图像中的单一颜色

django - 如何将网站托管在 Heroku 上并将数据库本地存储在我的计算机上?

python - 为 Django 表单中的只读字段动态创建 clean_* 方法

python - 从URL上传Django ImageField

python - 正则表达式 : pull the data between "FOO" and "BAR"

python - 从嵌套列表中获取索引位置

django - 运行 Django 服务器的 docker 命令是什么?

django - 使用 select_related 获取 related_name 对象

python - 尝试将 DRY 原则应用于 django 中的建模方法