Обновление поля класса Django Model из другого класса, связанного отношениями OneToOne
Я работаю на Django 5.0.4. Я создаю API с использованием DRF. Я новичок в DRF.
У меня есть 2 модели django, которые выглядят следующим образом :
class PostVideo(models.Model):
post = models.ForeignKey(Post, on_delete=models.CASCADE, related_name='videos', null=True)
width = models.PositiveIntegerField(editable=False, null=True)
height = models.PositiveIntegerField(editable=False, null=True)
duration = models.FloatField(editable=False, null=True)
file = VideoField(width_field='width', height_field='height',
duration_field='duration', storage=post_image_storage,
upload_to=upload_to_post_video_directory, blank=False, null=True)
video_type = (('regularvideo', 'regularvideo'),('gridvideo', 'gridvideo'),('livevideostream', 'livevideostream'))
mediaviewtype = models.CharField(max_length=24, choices=video_type, default='')
class LiveVideoStream(models.Model):
parent = models.OneToOneField(Post, related_name='live_video_stream', blank=False, null=True,on_delete=models.CASCADE)
stream_uuid = models.CharField(_('uuid'), null=False, editable=False, unique=False,
max_length=settings.LIVE_VIDEO_STREAM_UUID_MAX_LENGTH)
streamer = models.ForeignKey(User, related_name='live_video_streams', on_delete=models.CASCADE)
started_at = models.DateTimeField(
default=timezone.now, blank=False, editable=False,null=False)
video = models.OneToOneField(PostVideo, related_name='live_video_stream', blank=False, null=True,on_delete=models.CASCADE)
def create_live_video_stream_post(cls, parent, stream_uuid, streamer,started_at):
return cls.objects.create(parent=parent,stream_uuid=stream_uuid,streamer=streamer,
started_at=started_at)
Моя задача состоит в том, чтобы обновить mediaviewtype в классе PostVideo со значением 'livevideostream', когда я создаю PUT запрос для создания пост с живым видеопотоком с помощью метода create_live_stream_post выше. Я не уверен, как это сделать. Я получаю значение mediaviewtype, которое равно 'livevideostream', из моего фронтенд-приложения flutter и обрабатываю его через Serializer, но я застреваю, когда думаю, как обновить значение mediaviewtype в модели PostVideo.*
.
Вид для создания сообщения о прямой трансляции :
def put(self, request):
query_params = request.data.dict()
serializer = LiveVideoStreamRequestSerializer(data=query_params)
serializer.is_valid(raise_exception=True)
data = serializer.validated_data
post_uuid = data.get('post_uuid')
streamer = data.get('streamer')
started_at = data.get('started_at')
media_view_type = data.get('media_view_type')
User = get_user_model()
user = request.user
if streamer=='':
streamer = user
else:
streamer = User.objects.get(username=streamer)
Post = get_post_model()
post = Post.objects.get(uuid=post_uuid)
Stream = get_live_video_stream_model()
# Create Live Stream Post.
live_video_stream = Stream.create_live_video_stream_post(parent=post,stream_uuid=post_uuid, streamer=streamer,
started_at=started_at)
return Response(LiveVideoStreamResponseSerializer(live_video_stream, context={"request": request}).data, status=status.HTTP_200_OK)
The request & response serializers :
class LiveVideoStreamRequestSerializer(serializers.Serializer):
post_uuid = serializers.CharField(required=True)
streamer=serializers.CharField(max_length=50, required=False)
started_at = serializers.DateTimeField(required=False)
mediaviewtype = serializers.CharField(max_length=50, required=True)
class LiveVideoStreamResponseSerializer(serializers.ModelSerializer):
parent = UserPostSerializer(read_only=True)
stream_uuid = serializers.CharField(read_only=True)
class Meta:
model = LiveVideoStream
fields = (
'id',
'parent',
'stream_uuid',
'streamer',
'started_at',
'mediaviewtype',
)