【问题标题】:ValueError: invalid literal for int() with base 10:ValueError:以 10 为底的 int() 的无效文字:
【发布时间】:2013-05-07 04:35:27
【问题描述】:

这里是带有回溯的更新代码

这是模型:

class Base(models.Model):
    created_by = models.ForeignKey(User, related_name="(app_label)s_%(class)s_creator")
    edited_by = models.ForeignKey(User, related_name="(app_label)s_%(class)s_editor")
    created_at = models.DateTimeField(auto_now_add=True)
    modified_at = models.DateTimeField(auto_now=True)
     
    class Meta:
            abstract = True
 
class Department(Base):
    dept_id = models.AutoField(primary_key=True)
    name = models.CharField(max_length=60, unique=True)
    description = models.TextField()
 
    def __unicode__(self):
        return str(self.name)
 
 

错误回溯:
ValueError Traceback(最近一次调用最后一次)
C:\python27\lib\site-packages\django-1.5-py2.7.egg\django\core\management\commands\shell.pyc in () ----> 1 个测试 = Department.objects.create(name='test',description='test')

C:\python27\lib\site-packages\django-1.5-py2.7.egg\django\db\models\fields\__init__.pyc in get_prep_value(se
lf, value)
553 if value is None:
554 return None
--> 555 return int(value)
556
557 def contribute_to_class(self, cls, name):
 
ValueError: invalid literal for int() with base 10: '<property object at 0x000000000332AB38>'

【问题讨论】:

  • 您需要修复代码的混乱缩进。它在 Python 中不是可选的!
  • 另外,您发布的代码根本不调用int()。哪一行触发了错误?请发布整个回溯。
  • 保存时 test.save()

标签: python django django-models


【解决方案1】:

您必须在创建部门时提供user。如果您在视图中,您可以使用request.user 访问当前用户

user = request.user 

如果你在 shell 中测试,或者从数据库中获取任何用户

user = User.objects.get(id=1) # get 

然后创建department:

department = Department(name='test',
                        description='test',
                        user=user,
                        )

最后,您的default=User.pk 不正确。对于用户实例,您可以访问user.pk,但类属性User.pk 并不是您想象的当前用户的pk。

【讨论】:

  • 您似乎没有做出我建议的任何一项更改。 1. 创建部门时必须指定用户。 2. 您必须从您的Department.user 字段中删除default=User.pk,因为它没有任何意义。
猜你喜欢
  • 2018-09-09
  • 2020-01-04
  • 2010-12-22
  • 2011-07-07
  • 2019-10-14
  • 2022-05-19
相关资源
最近更新 更多