> Hi all,
>
> I'm new to django and python and i'm working on a project that works
> with a legacy database.
> I've a particular problem with a "composite key" and "get" or
> "get_object_or_404".
>
> i generated the below model form the legacy database using inspectdb
>
> model:
> ------------------
> class Member:
This should inherit from models.Model
> member_id = field.CharField(max_length=20)
> organization_id = field.Foreignkey(Organization)
> member_type = field.CharField(max_length=10)
> class Meta:
> db_table = u'member'
> unique_together =
> (('member_id','organization_id'),)
> # unique_together is a constraint i added in order to form the
> composite primary key
It's a composite key, but it's not a primary key - or at least it's
not recognized as such by Django (hint: Django doesn't handle
composite primary keys so far)
> class Organization:
idem
>
> I have a function in my view which receives a "MemOrgId" which is
> nothing but the composite key of both member_id and organization_id.
> for example the value i get is MemOrgId='AA1001', now the problem is
> when i try to use get or a get_object_or_404 i get a Value
> Error:Invalid Literal for int with base 10.
>
> obj = get_object_or_404(Member,pk = MemOrgId)
Since you didn't explicitly declared a primary key for your Member
model, Django automagically adds one, named "id" and defined as an
autoincrement integer, so the 'pk' shortcut resolves to this int
field.
> According to my understanding of the trace back its not able to
> convert the key "CP1001" to int coz it contains char data along with
> int. I cannot modify the database
Should not be a major problem.
> and i cannot change the way MemOrgId
> comes to the view function.
Why ?
> Is there a way around this problem????
Yes: split the compound key and do an explicit lookup:
def yourview(request, MemOrgId):
oid, mid = MemOrgId[0:2], MemOrgId[2:]
obj = get_object_or_404(
organization_id=oid,
member_id=mid
)
IRL you probably want a bit more validation on what the MemOrgId arg
looks like - but this can be done with the correct regexp in your
urls.py
--
You received this message because you are subscribed to the Google Groups "Django users" group.
To post to this group, send email to django-users@googlegroups.com.
To unsubscribe from this group, send email to django-users+unsubscribe@googlegroups.com.
For more options, visit this group at http://groups.google.com/group/django-users?hl=en.
No comments:
Post a Comment