Flexbox может это сделать
div {
margin: 1em auto;
width: 200px;
border: 5px solid red;
display: flex;
justify-content: flex-end;
overflow: hidden;
/* toggel to see overflow */
}
img {
display: block;
opacity: .5/* to show overflow */
}
<div>
<img src="http://www.fillmurray.com/460/300" alt="">
</div>
Что касается perform_create
, по вашему мнению, вам не нужно проверять serializer.is_valid()
там. Это уже проверено в create
до вызова perform_create
. И этот метод не предназначен для возврата ответа API, насколько я знаю. Он просто предназначен для выполнения каких-либо дополнительных действий, которые вы хотите, перед вызовом serializer.save()
. Для большинства основных применений оно никогда не переопределяется. Вы также можете передать своего пользователя и дату в метод сохранения или сделать это в сериализаторе.
Теперь в методе создания сериализатора вам не требуется доступ initial_data
. Все, что вам нужно, должно быть в validated_data
. Во-первых, вы должны вытолкнуть puppies
из validated_data
до вызова objects.create
, иначе он не сможет с этим справиться. Теперь вы можете создавать объекты PuppyOrder
, используя более ранних щенков.
Вот как вы добавляете дополнительные данные к validated_data сериализатора в представлении execute_create:
serializer.save(date=datetime.today(), user=self.request.user, total_price=total_price)
Вы можете сделать то же самое в методе создания сериализатора, просто добавив элементы непосредственно в проверенные данные. Это всего лишь обычный словарь:
validated_data['user'] = self.context['request'].user
validated_data['date'] = datetime.today()
validated_data['total_price'] = total_price
РЕДАКТИРОВАТЬ: Использование не модельного сериализатора для PuppyOrder
Поскольку порядок и PuppyOrder еще не созданы в то время, когда при отправке запроса следующая строка в OrderSerializer приведет к ошибке, поскольку сериализатор ожидает фактические PuppyOrders
puppies = PuppyOrderSerializer(source='puppyorder_set', many=True)
Вместо этого вы можете использовать не модельный сериализатор, подобный этому (при условии, что щенок уже существует): [ 1124]
class PuppyOrderCreateSerializer(serializers.Serializer):
puppy = serializers.PrimaryKeyRelatedField(queryset=Puppy.objects.all())
amount = serializers.IntegerField()
Затем вы можете использовать этот сериализатор в yuur OrderSerializer:
puppies_data = PuppyOrderCreateSerializer(many=True)