Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

125
Visualizações
Dar nombre de posiciones en django automáticamente

Estoy construyendo un sitio web de reserva de autobuses usando Django. Tengo una posición de atributo en mi mesa 'asiento'. Está vinculado al bus (tabla) por ForeignKey. Cada vez que se crea un autobús, se crean instancias de asientos iguales a la capacidad del autobús (la capacidad la define el usuario en la tabla de autobuses). Quiero nombrar las posiciones como 1_1, 1_2, 1_4, 1_5, 2_1, 2_2, 2_4, 2_5, etc. donde el primer dígito antes del guión bajo representa una fila y el dígito después del guión bajo representa una columna. No estoy usando 3 porque es el pasillo.

estos son mis modelos.py

 class Seat(models.Model): class Meta: verbose_name_plural = "Seat" id = models.AutoField(primary_key=True,) position = models.CharField(max_length=4) bus = models.ForeignKey(Bus) status = models.CharField(max_length=20, choices=(('available', 'available'), ('reserved', 'reserved'), ('unavailable', 'unavailable'),), default='Available') def __str__(self): return '{0}-{1}-{2}'.format((self.bus),(self.id),(self.status)) @receiver(post_save, sender=Bus) def create_seats(sender, instance, created, **kwargs): if created: for seat in range (0, int(instance.capacity)): instance.seat_set.create( )

Así se hace el nombramiento de puesto

ingrese la descripción de la imagen aquí

como puede ver, está vacío en el medio, por lo que no se usa esa tercera columna. Mi pregunta es cómo puedo nombrar automáticamente las posiciones (como creo asientos cada vez que se crea un objeto de autobús) de acuerdo con el gráfico sin tener que ir al objeto de asiento individual y nombrar la posición. Espero que recibas mi pregunta. Si necesita más información, por favor hágamelo saber.

about 4 years ago · Santiago Trujillo
2 Respostas
Responde à pergunta

0

Suponiendo que el diseño del bus es siempre el mismo:

 @receiver(post_save, sender=Bus) def create_seats(sender, instance, created, **kwargs): if created: for place_num in range(1, int(instance.capacity)+1): row = (place_num // 5) + 1 col = (place_num % 5) + 1 if col != 3 and row*col not in [24, 25]: instance.seat_set.create(position='%i_%i' % (row, col))
about 4 years ago · Santiago Trujillo Relatório

0

Esta respuesta asume que los autobuses pueden tener diferentes diseños de asientos, lo que significa que deberá definir el patrón de asientos para cada tipo de autobús.

La forma más básica sería definirlos como constantes, como listas/matrices bidimensionales, ingresando 1 para un asiento y 0 para ningún asiento:

 #seating_patterns.py BUS_1 = [ [1, 1, 0, 1, 1], [1, 1, 0, 1, 1], [1, 1, 0, 1, 1], [1, 1, 0, 1, 1], [1, 1, 0, 0, 0], [1, 1, 0, 1, 1], [1, 1, 0, 1, 1], [1, 1, 0, 1, 1], [1, 1, 1, 1, 1], ] BUS_2 = [etc] SEATING_ARRAYS = {'BUS_1': BUS_1, 'BUS_2': BUS_2}

Para hacer que esto sea más fácil de mantener, puede crear un modelo SeatingPattern, por ejemplo, con un ArrayField si esa es una opción para usted.

De lo contrario, importe los arreglos de asientos en su archivo de modelos:

 # models.py from .seating_patterns import SEATING_ARRAYS

y agregue un campo de patrón de asiento a su modelo de autobús, con una tupla de opciones para los autobuses:

 class Bus(models.Model): … SEATING_PATTERNS = ( ('BUS_1', 'BUS_1'), ('BUS_2', 'BUS_2'), ) … seating_pattern = models.CharField(choices=SEATING_PATTERNS, max_length=50)

Y cree la salida de formato correcta (1_1, 1_2, etc.) como esta en su señal post_save:

 if created: seating_pattern = SEATING_ARRAYS[instance.seating_pattern] for row,seats in enumerate(seating_pattern): for pos,seat in enumerate(seats): if seat: Seat.objects.create( bus=instance, position="{}_{}".format(str(row+1), str(pos+1)) )
about 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda