Django Администратор изменить многие на многие текст метки - PullRequest
0 голосов
/ 21 января 2020

У меня есть поле как часть класса комнаты

roomextra = models.ManyToManyField(
    to='hotel.RoomExtra',
    related_name='room_extra',
    verbose_name='room extra',
)

, в результате чего Django создал для меня связь многих ко многим. Это отношение отображается в виде TabularInline:

admin.py

class RoomExtraInLine(admin.TabularInline):
    model = Room.roomextra.through
    extra = 1
    verbose_name = _('Customise Room Extra')
    verbose_name_plural = _('Customise Room Extra(s)')
    form = AddRoomAddRoomExtrasForm

В администраторе Django, если я добавлю дополнительную комнату, я получу текст на изображении ниже:

enter image description here

Room_roomextra object (5)

выше выбранной мной опции. Как я могу изменить строку Room_roomextra?

Обновление

Код по запросу

class RoomExtra(models.Model):

    PER_PERSON = 0
    PER_ROOM = 1
    PER_CHOICES = [
        (PER_PERSON, _('Person')),
        (PER_ROOM, _('Room')),
    ]

    name = models.CharField(max_length=100)
    cost = models.DecimalField(
        default="0.00",
        max_digits=10,
        decimal_places=2,
        validators=[MinValueValidator(Decimal('0.00'))],
    )
    cost_per = models.IntegerField(
        choices=PER_CHOICES,
        default=PER_ROOM,
        verbose_name=_('Cost per'),
    )

    def __str__(self):
        return self.name


class Room(models.Model):

    name = models.CharField(max_length=100)
    type = models.ForeignKey(
        to='hotel.RoomType',
        on_delete=models.CASCADE,
    )
    location = models.ForeignKey(
        to='hotel.Location',
        on_delete=models.CASCADE,
    )
    description = models.TextField(
        blank=True,
        max_length=500,
    )
    roomextra = models.ManyToManyField(
        to='hotel.RoomExtra',
        related_name='room_extra',
        verbose_name='room extra',
    )
    bathroom = models.ForeignKey(
        to='hotel.Bathroom',
        on_delete=models.CASCADE,
    )
    available = models.BooleanField(default=True,)

    def __str__(self):
        return self.name

1 Ответ

0 голосов
/ 22 января 2020

Добавление прокси-модели для Room // Room Extra позволяет изменять вывод текста на Django admin

class RoomRoomExtraProxy(Room.roomextra.through):
class Meta:
    proxy = True

def __str__(self):
    return self.room.name + ' // ' + self.roomextra.name
...