Возьмите текущего администратора

serializers.py

class RegSerializer(serializers.ModelSerializer):
    admin = serializers.SlugRelatedField(slug_field='username', read_only=True)
    class Meta:
        model = Registration
        fields = [
        'id', 'rooms', 'first_name', 'last_name','admin', 'pasport_serial_num', 'birth_date', 'img', 'visit_date',
        'leave_date', 'guest_count', 'room_bool']

models.py

class Rooms(models.Model):
    objects = None
    room_num = models.IntegerField(verbose_name='Комната')
    room_bool = models.BooleanField(default=True, verbose_name='Релевантность')
    category = models.CharField(max_length=150, verbose_name='Категория')
    price = models.IntegerField(verbose_name='Цена (сум)', null=True)
    def __str__(self):
        return f'{self.room_num}'

    class Meta:
        verbose_name = 'Комнату'
        verbose_name_plural = 'Комнаты'


class Registration(models.Model):
    objects = None
    rooms = models.ForeignKey(Rooms, on_delete=models.CASCADE, verbose_name='Номер',
                              help_text='Номер в который хотите заселить гостя!',
                         )
    first_name = models.CharField(max_length=150, verbose_name='Имя')
    last_name = models.CharField(max_length=150, verbose_name='Фамилия')
    admin = models.ForeignKey(User, on_delete=models.CASCADE, verbose_name='Администратор')
    pasport_serial_num = models.CharField(max_length=100, verbose_name='Серия паспорта', help_text='*AB-0123456')
    birth_date = models.DateField(verbose_name='Дата рождения')
    img = models.FileField(verbose_name='Фото документа', help_text='Загружайте файл в формате .pdf')
    visit_date = models.DateField(
        default=django.utils.timezone.localdate, verbose_name='Дата прибытия')
    leave_date = models.DateField(blank=True, null=True, verbose_name='Дата отбытия', default='После ухода!')
    guest_count = models.IntegerField(default=1, verbose_name='Кол-во людей')
    room_bool = models.BooleanField(default=False, verbose_name='Релевантность',
                                    help_text='При бронирование отключите галочку')
    price = models.IntegerField(verbose_name='Цена (сум)', null=True)

    def __str__(self):
        return f'{self.rooms},{self.last_name},{self.first_name},{self.room_bool}'

    class Meta:
        verbose_name = 'Номер'
        verbose_name_plural = 'Регистрация'

как сделать так, чтобы в поле администратора указывалось имя пользователя, зарегистрировавшего комнату, а без права изменения только readonly?

можно ли это сделать вообще? заранее спасибо за ваш ответ

Вы можете передать дополнительные атрибуты в метод сохранения сериализатора. В вашем представлении вы можете вызвать serializer save() с аргументом admin следующим образом:

def your_view(request):
    # your code
    serializer.save(admin=request.user)
class RegSerializer(serializers.ModelSerializer):
    admin = serializers.HiddenField(default=serializers.CurrentUserDefault())

    class Meta:
        model = Registration
        exclude = ['price', 'visit_date']
Вернуться на верх