Django выдает «недопустимый литерал для int () с основанием 10: ''» при попытке сохранить атрибут объекта - PullRequest
2 голосов
/ 31 декабря 2011

Джанго продолжает выдавать следующее, когда я пытаюсь сохранить добавление двух атрибутов объекта.

invalid literal for int() with base 10: ''

Представление:

def buy_pack(request, pack_name):
if request.method == 'POST':
    form = CardForm(request.POST, request.user)
    pack = Pack.objects.get(name=pack_name)
    stripe_user = request.user.username

    if form.is_valid():
        token = request.POST['stripeToken']
        charge = stripe.Charge.create(
            amount=pack.cost,
            currency="usd",
            card=token,
            description=stripe_user+"_"+pack.name,
        )

        datestring = charge.created
        dt = datetime.datetime.fromtimestamp(float(datestring))
        new_purchase = Purchase(user=request.user, date_time=dt, pack=pack, payment_id=charge.id, last_4_digits=charge.card.last4)
        new_purchase.save()

        user_profile = request.user.get_profile()
        t = user_profile.videos_remaining + pack.videos_allowed
        user_profile.videos_remaining = t
        user_profile.save()

Рассматриваемые модели:

class UserProfile(models.Model):
    user = models.ForeignKey(User, unique=True)
    name = models.CharField(max_length=50)
    videos_remaining = models.IntegerField(default=1)
    last_4_digits = models.IntegerField(max_length=4, blank=True)
    stripe_id = models.CharField(max_length=255, blank=True)

    def __unicode__(self):
        return self.name

И:

class Pack(models.Model):
    name = models.CharField(max_length=25)
    videos_allowed = models.IntegerField()
    cost = models.IntegerField()

    def __unicode__(self):
        return self.name

Трассировка:

Traceback:
File "/Library/Python/2.7/site-packages/django/core/handlers/base.py" in get_response
  111.                         response = callback(request, *callback_args, **callback_kwargs)
File "/Users/Jeff/Dropbox/xxxxx/Code/thankyouvid/../thankyouvid/main/views.py" in buy_pack
  48.           user_profile.save()
File "/Library/Python/2.7/site-packages/django/db/models/base.py" in save
  460.         self.save_base(using=using, force_insert=force_insert, force_update=force_update)
File "/Library/Python/2.7/site-packages/django/db/models/base.py" in save_base
  526.                         rows = manager.using(using).filter(pk=pk_val)._update(values)
File "/Library/Python/2.7/site-packages/django/db/models/query.py" in _update
  491.         return query.get_compiler(self.db).execute_sql(None)
File "/Library/Python/2.7/site-packages/django/db/models/sql/compiler.py" in execute_sql
  869.         cursor = super(SQLUpdateCompiler, self).execute_sql(result_type)
File "/Library/Python/2.7/site-packages/django/db/models/sql/compiler.py" in execute_sql
  725.             sql, params = self.as_sql()
File "/Library/Python/2.7/site-packages/django/db/models/sql/compiler.py" in as_sql
  834.                 val = field.get_db_prep_save(val, connection=self.connection)
File "/Library/Python/2.7/site-packages/django/db/models/fields/subclassing.py" in inner
  28.             return func(*args, **kwargs)
File "/Library/Python/2.7/site-packages/django/db/models/fields/subclassing.py" in inner
  28.             return func(*args, **kwargs)
File "/Library/Python/2.7/site-packages/django/db/models/fields/__init__.py" in get_db_prep_save
  276.         return self.get_db_prep_value(value, connection=connection, prepared=False)
File "/Library/Python/2.7/site-packages/django/db/models/fields/subclassing.py" in inner
  53.             return func(*args, **kwargs)
File "/Library/Python/2.7/site-packages/django/db/models/fields/subclassing.py" in inner
  53.             return func(*args, **kwargs)
File "/Library/Python/2.7/site-packages/django/db/models/fields/__init__.py" in get_db_prep_value
  271.             value = self.get_prep_value(value)
File "/Library/Python/2.7/site-packages/django/db/models/fields/__init__.py" in get_prep_value
  876.         return int(value)

Exception Type: ValueError at /buy_pack/most/
Exception Value: invalid literal for int() with base 10: ''

Для справки: сохраненное значение для user_profile.videos_remaining равно 1, а сохраненное значение для pack.videos_allowed равно100. Я ожидаю, что он сложит два значения вместе и сохранит их как 101 в атрибуте объекта user_profile.videos_remaining.

Если вы можете оказать какую-либо помощь, я был бы очень признателен.

РЕДАКТИРОВАТЬ: Проблема закончилась тем, что я не передавал значение для целочисленного поля last_4_digits.Похоже, это происходит, если у вас есть integerField с blank = True и вы не отправляете значение для него.

Ответы [ 3 ]

8 голосов
/ 31 декабря 2011

Проблема закончилась тем, что я не передавал значение для целочисленного поля last_4_digits.Похоже, это происходит, если у вас есть integerField с blank = True и вы не отправляете значение для него.

3 голосов
/ 03 марта 2014

Я также сталкивался с этим сообщением об ошибке в скрипте заполнения Django с ForeignKey, имеющим оба значения blank=True и null=True, и передачей '' в качестве аргумента objects.get_or_create().

Я исправил проблемумимоходом argument=None.None часть является ключом.

0 голосов
/ 01 ноября 2018

Этот тип ошибки возникает, когда входной файл типа «Integer» содержит пустое или строковое значение, например «id», «.». »И т. Д. Итак, вы должны выяснить, для чего этот тип ввода вы получаете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...