On Thursday, 9 February 2012 11:29:52 UTC, anand jeyahar wrote:
>
> Hi, 
>    Am rather new to django and this error makes no sense to me.. 
>
>
> Traceback (most recent call last): 
>   File "<console>", line 1, in <module> 
>   File "/usr/local/lib/python2.7/dist-packages/django/db/models/ 
> base.py", line 460, in save 
>     self.save_base(using=using, force_insert=force_insert, 
> force_update=force_update) 
>   File "/usr/local/lib/python2.7/dist-packages/django/db/models/ 
> base.py", line 522, in save_base 
>     manager.using(using).filter(pk=pk_val).exists())): 
>   File "/usr/local/lib/python2.7/dist-packages/django/db/models/ 
> query.py", line 550, in filter 
>     return self._filter_or_exclude(False, *args, **kwargs) 
>   File "/usr/local/lib/python2.7/dist-packages/django/db/models/ 
> query.py", line 568, in _filter_or_exclude 
>     clone.query.add_q(Q(*args, **kwargs)) 
>   File "/usr/local/lib/python2.7/dist-packages/django/db/models/sql/ 
> query.py", line 1194, in add_q 
>     can_reuse=used_aliases, force_having=force_having) 
>   File "/usr/local/lib/python2.7/dist-packages/django/db/models/sql/ 
> query.py", line 1129, in add_filter 
>     connector) 
>   File "/usr/local/lib/python2.7/dist-packages/django/db/models/sql/ 
> where.py", line 67, in add 
>     value = obj.prepare(lookup_type, value) 
>   File "/usr/local/lib/python2.7/dist-packages/django/db/models/sql/ 
> where.py", line 316, in prepare 
>     return self.field.get_prep_lookup(lookup_type, value) 
>   File "/usr/local/lib/python2.7/dist-packages/django/db/models/fields/ 
> __init__.py", line 292, in get_prep_lookup 
>     return self.get_prep_value(value) 
>   File "/usr/local/lib/python2.7/dist-packages/django/db/models/fields/ 
> __init__.py", line 479, in get_prep_value 
>     return int(value) 
> ValueError: invalid literal for int() with base 10: '192.168.8.123' 
>
> Rather what i don't understand is why django is trying to int casting 
> the string... find attached the models.py file and the script am 
> running in python manage.py shell. 
>
> models.py: 
>
> #!/usr/bin/env python 
> import datetime 
> from django.db import models 
>
> class Lock(models.Model): 
>
> #    id = models.AutoField(primary_key=True) 
>     name = models.CharField(max_length=100,unique=True) 
>     #value = models.IntegerField(null=True) 
>     # No point.. if the record exists, there's  a lock, else there 
> isn't. 
>     info = models.CharField(max_length=1000) 
>     timestamp = models.DateTimeField(auto_now=True) 
>
>     @classmethod 
>     def clean(self, name, age=0): 
>         # Get a datetime that is offset by 'age' seconds 
>         dt = datetime.datetime.now() - datetime.timedelta(seconds=age) 
>
>         # Query and delete 
>         old = Lock.objects.filter(name=name , timestamp__lte=dt) 
>         old.delete() 
>
>
> Here's the code that triggers the error. 
>
> from locker.models import * 
>
> name = "192.168.8.123" 
> info = "Migrating VIP %s at %s "%("234.34.32.342","12.34.43.22") 
> lock = Lock(name,info) 
> lock.save() 
>
>
> now from what i understand django tries to search the table with the 
> primary key as the name field. But django documentation says it by 
> default creates an automatic  primary key field 'id'. My question is 
> why does it expect it to be explicitly passed?? 
>

There's no searching going on here. You create a lock instance, passing two 
positional arguments, which Django interprets as the first fields, ID and 
name. 

That's why you should never use positional arguments when instantiating - 
always do it via keyword arguments:
lock = Lock(name=name, info=info)

Note that as I say, you're not actually checking if there's a lock with 
that name already. You probably want to actually do that.
--
DR.

-- 
You received this message because you are subscribed to the Google Groups 
"Django users" group.
To view this discussion on the web visit 
https://groups.google.com/d/msg/django-users/-/oPrHxzu4H6QJ.
To post to this group, send email to django-users@googlegroups.com.
To unsubscribe from this group, send email to 
django-users+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/django-users?hl=en.

Reply via email to