No, django does not support composite primary keys. So trying to use
composite primary keys will not work. The best you can accomplish is a
constraint.

HTH

Tom

On Thu, Dec 2, 2010 at 7:45 AM, Pranav <pranav...@gmail.com> wrote:
>
>
> On Dec 2, 12:10 am, bruno desthuilliers
> <bruno.desthuilli...@gmail.com> wrote:
>> On 1 déc, 19:20, Pranav <pranav...@gmail.com> wrote:
>>
>> > 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
>
> Thanks your solution worked, but now i have a bigger problem i cant
> seem to save my form.
> Django adds a automatic "id" to the table which i don't have in my
> database so my database is throwing an error. Also none of the fields
> in my table are unique so cannot set manual primary_key=True, I cannot
> change the database as I said earlier. Is there a way to ignore this
> auto generated id or a way to use the create a table without any
> primary keys.
>
> --
> You received this message because you are subscribed to the Google Groups 
> "Django users" group.
> To post to this group, send email to django-us...@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.
>
>

-- 
You received this message because you are subscribed to the Google Groups 
"Django users" group.
To post to this group, send email to django-us...@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