Definir tablas con múltiples campos en la clave principal

1,636 views
Skip to first unread message

Jose Luis Dallapiccola

unread,
Feb 7, 2009, 7:30:44 PM2/7/09
to djan...@googlegroups.com
Hola.
Soy nuevo en la lista, en django y en python un poquito más de
experiencia, aunque no mucha.

Tengo que definir una tabla con dos campos en la clave principal.
El ejemplo podría ser el siguiente:

class Provincia(models.Model):
pais = models.ForeignKey(Pais)
provincia_id = models.IntegerField()
provincia = models.CharField(max_length=50)

Y la clave principal tendría que estar formada por los campos pais y
provincia_id.

Esto se puede hacer?

Desde ya muchísimas gracias...

--
---
José Luis DALLAPICCOLA
Neuquén Capital
Patagonia Argentina

Enrique Martín

unread,
Feb 8, 2009, 10:17:47 AM2/8/09
to djan...@googlegroups.com
2009/2/7 Jose Luis Dallapiccola <jld...@gmail.com>:

>
> Hola.
> Soy nuevo en la lista, en django y en python un poquito más de
> experiencia, aunque no mucha.
>
> Tengo que definir una tabla con dos campos en la clave principal.
> El ejemplo podría ser el siguiente:
>
> class Provincia(models.Model):
> pais = models.ForeignKey(Pais)
> provincia_id = models.IntegerField()
> provincia = models.CharField(max_length=50)
>
> Y la clave principal tendría que estar formada por los campos pais y
> provincia_id.
>
> Esto se puede hacer?

Si, se puede: http://docs.djangoproject.com/en/dev/ref/models/options/#unique-together

Sergio Gómez

unread,
Feb 8, 2009, 6:40:44 PM2/8/09
to djan...@googlegroups.com
Enrique Martín escribió:

Ojo que técnicamente un UNIQUE contraint no es exactamente lo mismo que
un primary key.
Es muy probable que para el ejemplo planteado te sirva. Pero no son
cosas iguales conceptualmente.
En django no se puede definir claves primarias compuestas.


Roberto Sánchez Almonacid

unread,
Feb 9, 2009, 10:14:12 AM2/9/09
to djan...@googlegroups.com


2009/2/8 Sergio Gómez <sergi...@gmail.com>



--

Saludos

Atte.
Roberto E. Sánchez Almonacid
Coordinador de Tecnologias
Programa Red de Telecentros Comunitarios - Municipalidad de Puerto Montt
San Martin 167 - Of 201
56-65-484563
56-9-93691076
http://www.telecentrospuertomontt.cl

Sergio Gómez

unread,
Feb 9, 2009, 1:35:49 PM2/9/09
to djan...@googlegroups.com
Roberto Sánchez Almonacid escribió:
>
>
> 2009/2/8 Sergio Gómez <sergi...@gmail.com <mailto:sergi...@gmail.com>>

>
>
> Enrique Martín escribió:
> > 2009/2/7 Jose Luis Dallapiccola <jld...@gmail.com
> <mailto:jld...@gmail.com>>:

> >> Hola.
> >> Soy nuevo en la lista, en django y en python un poquito más de
> >> experiencia, aunque no mucha.
> >>
> >> Tengo que definir una tabla con dos campos en la clave principal.
> >> El ejemplo podría ser el siguiente:
> >>
> >> class Provincia(models.Model):
> >> pais = models.ForeignKey(Pais)
> >> provincia_id = models.IntegerField()
> >> provincia = models.CharField(max_length=50)
> >>
> >> Y la clave principal tendría que estar formada por los campos pais y
> >> provincia_id.
> >>
> >> Esto se puede hacer?
> >
> > Si, se puede:
> http://docs.djangoproject.com/en/dev/ref/models/options/#unique-together
> >
>
> Ojo que técnicamente un UNIQUE contraint no es exactamente lo mismo que
> un primary key.
> Es muy probable que para el ejemplo planteado te sirva. Pero no son
> cosas iguales conceptualmente.
> En django no se puede definir claves primarias compuestas.
>
>
> Pero se puede hac er esto
>
> http://djangodoku.conescy.org/ref/models/options.html#unique-together
>

Tu enlace es lo que comentó Enrique anteriormente. Por eso les aclaro
que un unique constraint no es lo mismo que una clave primaria.

Roberto Sánchez Almonacid

unread,
Feb 9, 2009, 3:16:09 PM2/9/09
to djan...@googlegroups.com


2009/2/9 Sergio Gómez <sergi...@gmail.com>
Ups sorry me disculpo no mire el enlace
 


Jose Luis Dallapiccola

unread,
Feb 10, 2009, 8:32:54 AM2/10/09
to djan...@googlegroups.com
Hola.
Bueno, por lo que he leido NO se puede.
http://docs.djangoproject.com/en/dev/faq/models/#do-django-models-support-multiple-column-primary-keys

Hay veces que no es estrictamente necesario, como en el caso que puse
de ejemplo.
Pero... en otros casos, como el típico facturas y artículos vendidos
por esas facturas, es conveniente (al menos ese es mi criterio) que la
clave principal de las tablas involucradas esté compuesta por
múltiples columnas.

Saludos,


2009/2/9 Roberto Sánchez Almonacid <robert...@gmail.com>:

Percy Perez

unread,
Feb 10, 2009, 12:17:58 PM2/10/09
to Django-es
Parece que estan trabajando en ese aspecto.

Anadir soporte para multiples campos en llave primaria: ticket 373
http://code.djangoproject.com/ticket/373


On 10 feb, 05:32, Jose Luis Dallapiccola <jlda...@gmail.com> wrote:
> Hola.
> Bueno, por lo que he leido NO se puede.http://docs.djangoproject.com/en/dev/faq/models/#do-django-models-sup...
>
> Hay veces que no es estrictamente necesario, como en el caso que puse
> de ejemplo.
> Pero... en otros casos, como el típico facturas y artículos vendidos
> por esas facturas, es conveniente (al menos ese es mi criterio) que la
> clave principal de las tablas involucradas esté compuesta por
> múltiples columnas.
>
> Saludos,
>
> 2009/2/9 Roberto Sánchez Almonacid <roberto.u...@gmail.com>:
>
>
>
>
>
> > 2009/2/9 Sergio Gómez <sergio....@gmail.com>
>
> >> Roberto Sánchez Almonacid escribió:
>
> >> > 2009/2/8 Sergio Gómez <sergio....@gmail.com
> >> > <mailto:sergio....@gmail.com>>
>
> >> >     Enrique Martín escribió:
> >> >      > 2009/2/7 Jose Luis Dallapiccola <jlda...@gmail.com
> >> >     <mailto:jlda...@gmail.com>>:
Reply all
Reply to author
Forward
0 new messages